求助

P11228 [CSP-J 2024] 地图探险

luojingjie @ 2024-11-04 21:59:04

#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,x,y,d;
char a[1000][1000];
bool flag[1000][1000];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n>>m>>k>>x>>y>>d;
        long long ans=1;
        memset(flag,false,sizeof flag);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        flag[x][y]=true;
        for(int i=1;i<=k;i++){
            if(d==0){
                if(a[x][y+1]=='.'){
                    if(flag[x][y+1]==false){
                        ans++;
                    }
                    y++;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
            else if(d==1){
                if(a[x+1][y]=='.'){
                    if(flag[x+1][y]==false){
                        ans++;
                    }
                    x++;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
            else if(d==2){
                if(a[x][y-1]=='.'){
                    if(flag[x][y-1]==false){
                        ans++;
                    }
                    y--;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
            else{
                if(a[x-1][y]=='.'){
                    if(flag[x-1][y]==false){
                        ans++;
                    }
                    x--;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
        }
        cout<<ans<<"\n";
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,x,y,d;
bool flag[1000][1000];
char a[1000][1000];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n>>m>>k>>x>>y>>d;
        long long ans=1;
        memset(flag,false,sizeof flag);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        flag[x][y]=true;
        for(int i=1;i<=k;i++){
            if(d==0){
                if(a[x][y+1]=='.'){
                    if(flag[x][y+1]==false){
                        ans++;
                    }
                    y++;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
            else if(d==1){
                if(a[x+1][y]=='.'){
                    if(flag[x+1][y]==false){
                        ans++;
                    }
                    x++;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
            else if(d==2){
                if(a[x][y-1]=='.'){
                    if(flag[x][y-1]==false){
                        ans++;
                    }
                    y--;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
            else{
                if(a[x-1][y]=='.'){
                    if(flag[x-1][y]==false){
                        ans++;
                    }
                    x--;
                    flag[x][y]=true;
                }
                else{
                    d=(d+1)%4;
                }
            }
        }
        cout<<ans<<"\n";
    }
    return 0;
}

两份代码,为啥交换了数组的位置,就多了20分?


|