AC但是不理解

P11228 [CSP-J 2024] 地图探险

lizechenQAQ @ 2024-11-23 21:30:27

AC代码:

#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
    cin>>t;
    while(t--){
        char mapss[1001][1001]={};
        long long n,m,k,dx,dy,d,ans;
        cin>>n>>m>>k>>dx>>dy>>d;
        bool maps[1001][1001]={};
        maps[dx][dy]=true;
        ans=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>mapss[i][j];
        while(k--){
            long long ddx=dx,ddy=dy;
            if(d==0) dy++;
            if(d==1) dx++;
            if(d==2) dy--;
            if(d==3) dx--;
            if(dx<1||dx>n||dy<1||dy>m||mapss[dx][dy]=='x'){
                dx=ddx,dy=ddy;
                d=(d+1)%4;
            }
            else if(!maps[dx][dy]){
                ans++;
                maps[dx][dy]=true;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

50pts代码:

#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
    cin>>t;
    while(t--){
        char mapss[1001][1001]={};
        long long n,m,k,dx,dy,d,ans;
        cin>>n>>m>>k>>dx>>dy>>d;
        bool maps[1001][1001]={};
        ans=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>mapss[i][j];
        while(k--){
            long long ddx=dx,ddy=dy;
            if(d==0) dy++;
            if(d==1) dx++;
            if(d==2) dy--;
            if(d==3) dx--;
            if(dx<1||dx>n||dy<1||dy>m||mapss[dx][dy]=='x'){
                dx=ddx,dy=ddy;
                d=(d+1)%4;
            }
            else if(!maps[dx][dy]){
                ans++;
                maps[dx][dy]=true;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

这两段代码之间就差了个

maps[dx][dy]=true;

结果相差50分,为什么?


by HZHDCM @ 2024-11-23 21:38:55

有时候在走的时候并不会回到一开始的点,所以会导致答案少了@lizechenQAQ


by wyz0326 @ 2024-11-23 21:39:49

鄙人考场上血的教训 这个题意里面有一种可能就是说有重复的点,但计数只能记一次,所以要加一个去重 我就因为这个丢分了,本来能干250+,(哭泣);


by lizechenQAQ @ 2024-11-23 21:40:32

OK,本蒟蒻已理解,此贴结


|