恶心的MLE求助
查看原帖
恶心的MLE求助
380042
piggy123楼主2021/12/21 21:32
#include <bits/stdc++.h>
#define ll int
using namespace std;

ll an[8][2]= {{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
bool vis[505][505];
string a[505];
queue<pair<ll,ll>> qp;
pair<ll,ll> pl;

int main() {
	ll n,m,q,x,y;
	cin >> n >> m;
	for (ll i=1; i<=n; i++) {
		for (ll j=1; j<=m; j++) {
			cin >> a[i][j];
		}
	}
	cin >> q;
	for (ll i=0; i<q; i++) {
		ll ans=0x3f3f3f;
		cin >> x >> y;
		for (ll j=0; j<=n; j++)
			fill(vis[j],vis[j]+m+1,0);
		
		qp.push(make_pair(x,y));
		while (!qp.empty()) {
			pl=qp.front();
			qp.pop();
			vis[pl.first][pl.second]=1;
			if((pl.first-x)*(pl.first-x)+(pl.second-y)*(pl.second-y)>ans)continue;
			if (a[pl.first][pl.second]=='x') {
				ans=min(ans,(pl.first-x)*(pl.first-x)+(pl.second-y)*(pl.second-y));
			}

			for (ll j=0; j<4; j++) {
				if((pl.first+an[j][0]-x)*(pl.first+an[j][0]-x)+(pl.second+an[j][1]-y)*(pl.second+an[j][1]-y)<ans&&pl.first+an[j][0]<=n&&pl.first+an[j][0]>=1&&pl.second+an[j][1]<=m&&pl.second+an[j][1]>=1&&!vis[pl.first+an[j][0]][pl.second+an[j][1]]) {
					qp.push(make_pair(pl.first+an[j][0],pl.second+an[j][1]));
				}

			}
		}
		while (!qp.empty())qp.pop();
		cout << ans << endl;
		a[x][y]='x';
	}
	return 0;
}
2021/12/21 21:32
加载中...