社区讨论

比赛样例都过了,回来再打一遍就错了

P11228[CSP-J 2024] 地图探险参与者 2已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@m2py1sf9
此快照首次捕获于
2024/10/26 17:13
去年
此快照最后确认于
2025/11/04 16:03
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,y,d;
const int N=1e3+50;
int a[N][N];
int vis[N][N];
int f(int x0,int y0){
	if(x0<1 || x0>n ||y0<1 || y0>m || a[x0][y0]==0){
		return 0;
	}
	return 1;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		cin>>n>>m>>k>>x>>y>>d;
		vis[x][y]=1;
		for(int i=1;i<=n;++i){
			for(int j=1;j<=m;++j){
				char c;
				cin>>c;
				if(c=='x') a[i][j]=0;
				else a[i][j]=1;
			}
			
		}
		for(int i=1;i<=k;++i){
			
			if(d==0){
				int tmp=f(x,y+1);
				if(tmp==1){
					y+=1;
					vis[x][y]=1;
				}
				else{
					d=(d+1)%4;
				}
			}
			else if(d==1){
				int tmp=f(x+1,y);
				if(tmp==1){
					x+=1;
					vis[x][y]=1;
				}
				else{
					d=(d+1)%4;
				}
			}
			else if(d==2){
				int tmp=f(x,y-1);
				if(tmp==1){
					y-=1;
					vis[x][y]=1;
				}
				else{
					d=(d+1)%4;
				}
			}
			else if(d==3){
				int tmp=f(x-1,y);
				if(tmp==1){
					x-=1;
					vis[x][y]=1;
				}
				else{
					d=(d+1)%4;
				}
			}
		}
		int index=0;
		for(int i=1;i<=n;++i){
			for(int j=1;j<=m;++j){
				if(vis[i][j]==1){
					index ++;
				}
			}
		}
		cout<<index<<endl;
	}
	return 0;
}

回复

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

正在加载回复...