memset比fill快这么多?
查看原帖
memset比fill快这么多?
380042
piggy123楼主2021/12/22 16:56

把fill换成memset后跑得飞快:

#include <bits/stdc++.h>
#define ll int
using namespace std;

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


int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);
	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;
		if(a[x][y]=='x'){
			cout<<0<<endl;
			continue;
		}
		for (ll j=0; j<=n; j++)
			fill(vis[j],vis[j]+m+1,0);


		qp.push(make_pair(x,y));
		
		vis[x][y]=1;
		while (!qp.empty()) {
			pl=qp.front();
			qp.pop();
			for (ll j=0; j<4; j++) {
				ll px=pl.first+an[j][0],py=pl.second+an[j][1];
				if((px-x)*(px-x)+(py-y)*(py-y)>=ans)continue;
				if(px<=n&&px>=1&&py<=m&&py>=1&&!vis[px][py]) {
					if (a[px][py]=='x') {
						ans=min(ans,(px-x)*(px-x)+(py-y)*(py-y));
					}
					qp.push(make_pair(px,py));
					vis[px][py]=1;
				}
			}
		}
		while (!qp.empty())qp.pop();
		cout << ans << endl;
		a[x][y]='x';
	}

	return 0;
}
2021/12/22 16:56
加载中...