20分求助
查看原帖
20分求助
638942
Yzh20240706楼主2022/12/16 12:34

不吸氧能A#5,#7,T#3

吸了氧后A#4#5#7

无O2

O2

#include<bits/stdc++.h>
#define re register
using namespace std;
int n,m,a,b;
int sx[100010],sy[100010];
int ex[100010],ey[100010];
int mp[510][510];
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int sum;
int front,rear;
bool f[510][510],v[510][510];

struct node{
	int t;
	int x,y;
}q[250010];

int main(){
	scanf("%d%d%d%d",&n,&m,&a,&b);
	for(re int i=1;i<=a;i++){
		scanf("%d%d",&sx[i],&sy[i]);
		q[rear].x=sx[i];
		q[rear].y=sy[i];
		q[rear].t=0;
		rear++;
	}
	for(re int i=1;i<=b;i++){
		scanf("%d%d",&ex[i],&ey[i]);
		f[ex[i]][ey[i]]=true;
	}
	while(front<rear){
		int t=q[front].t;
		int x=q[front].x;
		int y=q[front].y;
		v[x][y]=true;
		mp[x][y]=t;
		if(f[x][y]){
			sum++;
			f[x][y]=false;
		}
		if(sum==b){
			break;
		}
		for(re int i=0;i<4;i++){
			if(!v[x+dx[i]][y+dy[i]]){
				v[x+dx[i]][y+dy[i]]=true;
				q[rear].t=t+1;
				q[rear].x=x+dx[i];
				q[rear].y=y+dy[i];
				rear++;
			}
		}
		front++;
	}
	for(re int i=1;i<=b;i++){
		printf("%d\n",mp[ex[i]][ey[i]]);
	}
	return 0;
}
2022/12/16 12:34
加载中...