社区讨论

两个问题在考场里解决了,家里没解决(本人真乐)

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

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@m2r6fkgb
此快照首次捕获于
2024/10/27 13:56
去年
此快照最后确认于
2024/10/27 15:31
去年
查看原帖
本代码纯纯暴力模拟(太蒻了只会这么写,怎么好理解怎么来)
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
char map1[1006][1006];
int vis[1006][1006]={};
int zx,zy,sp,xx,xy,fx,cnt;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>zx>>zy>>sp;
		cin>>xx>>xy>>fx;
		for(int j=1;j<=zx;j++){
			for(int k=1;k<=zy;k++){
				cin>>map1[j][k];
			}
		}
		vis[xx][xy]=1;
		for(int j=1;j<=sp;j++){
			if(fx==0){//从这里
				if(map1[xx][xy+1]=='.'){
					vis[xx][xy+1]=1;
					xy+=1;
				}
				else if(map1[xx][xy+1]=='x'){
					fx=(fx+1)%4;
				}
				else{
					fx=(fx+1)%4;
				}
			}
			if(fx==1){//到这里会多一次行动次数,导致样例一输出不是3是4(本人很乐,考场里解决了家里不会了)
				if(map1[xx+1][xy]=='.'){
					vis[xx+1][xy]=1;
					xx+=1;
				}
				else if(map1[xx+1][xy]=='x'){
					fx=(fx+1)%4;
				}
				else{
					fx=(fx+1)%4;
				}
			}
			if(fx==2){
				if(map1[xx][xy-1]=='.'){
					vis[xx][xy-1]=1;
					xy-=1;
				}
				else if(map1[xx][xy-1]=='x'){
					fx=(fx+1)%4;
				}
				else{
					fx=(fx+1)%4;
				}
			}
			if(fx==3){
				if(map1[xx-1][xy]=='.'){
					vis[xx-1][xy]=1;
					xx-=1;
				}
				else if(map1[xx-1][xy]=='x'){
					fx=(fx+1)%4;
				}
				else{
					fx=(fx+1)%4;
				}
			}
		}
		for(int j=1;j<=zx;j++){
			for(int k=1;k<=zy;k++){
				if(vis[j][k]==1){
					cnt++;
					vis[j][k]=0;//考场里也这么写的为什么考场里清零了,在家里没清零(悲)
				}
			}
		}
		cout<<cnt<<endl;
	}
	return 0;
}

回复

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

正在加载回复...