求助csp-j T2(悬关)

学术版

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


|