tjx123456 @ 2024-11-01 22:49:42
本蒟蒻这题只拿了40pts,dalao们帮调一下qwq
题目
Wrong Code
#include <bits/stdc++.h>
const int maxn=1005;
char a[maxn][maxn];
bool vis[maxn][maxn];
int n,m,k;
bool is_valid(int x,int y){
if(x<1||x>n||y<1||y>m) return false;
if(a[x][y]=='x') return false;
return true;
}
int main(){
int T;
scanf("%d",&T);
for(int _=1;_<=T;_++){
int x,y,d;
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d%d",&x,&y,&d);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) vis[i][j]=false;
}
for(int i=1;i<=n;i++){
scanf("%s",&a[i][1]);
}
int ans=1;
vis[x][y]=true;
while(k--){
int xi=x,yi=y;
if(d==0) yi+=1;
else if(d==1) xi+=1;
else if(d==2) yi-=1;
else if(d==3) xi-=1;
if(is_valid(xi,yi)&&!vis[xi][yi]){
ans++;
x=xi,y=yi;
vis[x][y]=true;
}
else d=(d+1)%4;
}
printf("%d\n",ans);
}
return 0;
}
by An_OIer @ 2024-11-01 22:59:54
#include <bits/stdc++.h>
const int maxn=1005;
char a[maxn][maxn];
bool vis[maxn][maxn];
int n,m,k;
bool is_valid(int x,int y){
if(x<1||x>n||y<1||y>m) return false;
if(a[x][y]=='x') return false;
return true;
}
int main(){
int T;
scanf("%d",&T);
for(int _=1;_<=T;_++){
int x,y,d;
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d%d",&x,&y,&d);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) vis[i][j]=false;
}
for(int i=1;i<=n;i++){
scanf("%s",&a[i][1]);
}
int ans=1;
vis[x][y]=true;
while(k--){
int xi=x,yi=y;
if(d==0) yi+=1;
else if(d==1) xi+=1;
else if(d==2) yi-=1;
else if(d==3) xi-=1;
if(is_valid(xi,yi)){
if(!vis[xi][yi])
ans++;
x=xi,y=yi;
vis[x][y]=true;
}
else d=(d+1)%4;
}
printf("%d\n",ans);
}
return 0;
}
by An_OIer @ 2024-11-01 23:01:26
判断的时候vis走过了还是要再走一遍的,只不过ans不要动罢了
by An_OIer @ 2024-11-01 23:02:31
@tjx123456