玄学问题

P11228 [CSP-J 2024] 地图探险

andy605 @ 2024-12-08 11:39:42

大佬求调!

#include <bits/stdc++.h>
using namespace std;
bool a[1010][1010],s[1010][1010];
int t;
int cnt;
int x,y;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int m,n,d,k;
int main(){
    cin>>t;
    while(t--){

        memset(a,false,sizeof(a));
        memset(s,false,sizeof(s));
        cnt=0;
        scanf("%d%d%d\n%d%d%d",&m,&n,&k,&x,&y,&d);
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                a[i][j]=(getchar()=='.'?true:false);
        s[x][y]=true;
        cnt++;
        while(k--){
            int xx=x+dx[d];
            int yy=y+dy[d];
            if(a[xx][yy]==1){
                x=xx;
                y=yy;
                if(!s[x][y]){
                    s[x][y]=true;
                    cnt++;
                }
            }
            else d=(d+1)%4;
        }
        printf("%d\n",cnt);
    }
}

第一次正常输入输出,结果正确 然后第二次在循环的时候,完美跳过了输入...... 求调,悬关QWQ!


by wait_for_load @ 2024-12-08 11:47:14

@andy605 不要用 getchar 会读到其他东西

#include <bits/stdc++.h>
using namespace std;
bool a[1010][1010],s[1010][1010];
int t;
int cnt;
int x,y;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int m,n,d,k;
int main(){
    cin>>t;
    while(t--){
        memset(a,false,sizeof(a));
        memset(s,false,sizeof(s));
        cnt=0;
        scanf("%d%d%d\n%d%d%d",&m,&n,&k,&x,&y,&d);
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++){
                char ch;
                cin>>ch;
                a[i][j]=(ch=='.'?true:false);
            }
        s[x][y]=true;
        cnt++;
        while(k--){
            int xx=x+dx[d];
            int yy=y+dy[d];
            if(a[xx][yy]==1){
                x=xx;
                y=yy;
                if(!s[x][y]){
                    s[x][y]=true;
                    cnt++;
                }
            }
            else d=(d+1)%4;
        }
        printf("%d\n",cnt);
    }
}

by andy605 @ 2024-12-15 10:36:06

@wait_for_load

过了,已关,谢谢!


|