社区讨论

70pts求条,wa at #7#9#10

P1363幻象迷宫参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mmirxuwz
此快照首次捕获于
2026/03/09 14:02
昨天
此快照最后确认于
2026/03/09 21:12
22 小时前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
char c[1505][1505]; 
int vis[1505][1505];
int tx[]={+1,-1,0,0};
int ty[]={0,0,+1,-1};

int hash_val(int x,int y){
    return (x+n*1000)/n*131 + (y+m*1000)/m*131;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	while(cin>>n>>m){
		memset(vis,0,sizeof vis);
		int sx,sy;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>c[i][j];
				if(c[i][j]=='S')sx=i,sy=j,c[i][j]='.';
			}
		}
		
		int f=0;
		queue<pair<int,int>> q;
		q.push({sx,sy});
		vis[sx][sy]=hash_val(sx,sy);
		
		while(!q.empty() && !f){
			int x=q.front().first,y=q.front().second;
			q.pop();
			
			for(int i=0;i<4;i++){
				int xx=x+tx[i],yy=y+ty[i];
				int rx=xx, ry=yy;
				xx=((xx-1)%n+n)%n+1;
				yy=((yy-1)%m+m)%m+1;
				
				if(c[xx][yy]=='#') continue;
				
				int h = hash_val(rx,ry);
				
				if(!vis[xx][yy]){
					vis[xx][yy]=h;
					q.push({rx,ry});
				}else if(vis[xx][yy]!=h){
					cout<<"Yes\n";
					f=1;
					break;
				}
			}
		}
		
		if(!f) cout<<"No\n";
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...