0pts求调(玄关)
查看原帖
0pts求调(玄关)
1276703
Herobrine10楼主2024/7/26 16:18
#include<bits/stdc++.h>
using namespace std;
const int MOD=1145141,MAXN=505;
struct Node{int x,y,power;};
int N,M,Q,id,powerGrid[MAXN][MAXN];
char grid[MAXN][MAXN];
bool visited[MAXN][MAXN];
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
bool calculatePower(int sx, int sy, int tx, int ty, int v) {
    memset(visited,0,sizeof(visited));
    queue<Node>q;q.push({sx,sy,0});
	visited[sx][sy]=1;
	while (!q.empty()) {
        Node node=q.front();q.pop();
		if (node.x==tx&&node.y==ty&&node.power==v)return 1;
	for(int i=0;i<4;i++) {
            int nx=node.x+dx[i];
            int ny=node.y+dy[i];
			if (nx>=0&&nx<N&&ny>=0&&ny<M&&!visited[nx][ny]&&grid[nx][ny]!='#'){
            	int new_power=(node.power*10+powerGrid[nx][ny])%MOD;
            	if (new_power<=v){
                    q.push({nx,ny,new_power});
                    visited[nx][ny]=1;
                }
            }
        }
    }
	return 0;
}
int main(){
    cin>>N>>M>>Q>>id;
	for(int i=0;i<N;i++){
        for (int j=0;j<M;j++){
            cin>>powerGrid[i][j];
            grid[i][j]='0';
        }
    }
	for(int i=0;i<Q;i++){
        int type;
        cin>>type;
        if(type==1){
            int x,y;char c;
            cin>>x>>y>>c;
            if(c=='#'){
                grid[x][y]='#'; 
            }
			else{
                powerGrid[x][y]=c-'0'; 
                grid[x][y]='0';
            }
        }
		else{
            int sx,sy,tx,ty,v;
            cin>>sx>>sy>>tx>>ty>>v;
            int result=calculatePower(sx,sy,tx,ty,v);
            if (result){
                cout<<"Yes"<<endl;
            }
			else{
                cout <<"No"<< endl;
            }
        }
    }
	return 0;
}
2024/7/26 16:18
加载中...