社区讨论
两个问题在考场里解决了,家里没解决(本人真乐)
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 条回复,欢迎继续交流。
正在加载回复...