求调60

P11228 [CSP-J 2024] 地图探险

Yzc10729 @ 2024-10-29 21:46:45


#include<bits/stdc++.h>

using namespace std;

char a[10001][10001];

set<int> mmap;

int main(){

        int t;
    cin>>t;
    for(int p=1;p<=t;p++){
        memset(a,0,sizeof a);
        mmap.clear();
        int n,m,k;
        cin>>n>>m>>k;
        int x,y,d;
        cin>>x>>y>>d;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        int cnt=1;
        mmap.insert(x*10+y);
        for(int i=1;i<=k;i++){
            if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]=='.'){
                if(d==1){
                    if(x+1<1||x+1>n||y<1||y>m||a[x+1][y]=='x'){
                        d=d+1;
                        d%=4; 
                    }else{
                        x+=1;
                        cnt++;
                        int c=x*10+y;
                        mmap.insert(c);
                    }
                }else if(d==2){
                    if(x<1||x>n||y-1<1||y-1>m||a[x][y-1]=='x'){
                        d=d+1;
                        d%=4; 

                    }else{
                        y-=1;
                        cnt++;
                        int c=x*10+y;
                        mmap.insert(c);
                    }
                }else if(d==3){
                    if(x-1<1||x-1>n||y<1||y>m||a[x-1][y]=='x'){
                        d=d+1;
                        d%=4; 
                    }else{
                        x-=1;
                        cnt++;
                        int c=x*10+y;
                        mmap.insert(c);
                    }
                }else if(d==0){
                    if(x<1||x>n||y+1<1||y+1>m||a[x][y+1]=='x'){
                        d=d+1;
                        d%=4; 
                    }else{
                        y+=1;
                        cnt++;
                        int c=x*10+y;
                        mmap.insert(c);
                    }
                }
            }
        }
        cout<<mmap.size()<<endl;
    }

    return 0;
}

by _QyGyQ_ @ 2024-10-30 18:21:12

@Yzc10729 x*10+y 这个好像有点问题


by _QyGyQ_ @ 2024-10-30 18:23:51

@Yzc10729 我猜测您打算将 (x,y) 的坐标当成一个数处理,但是这样可能会出现问题。比如,两个坐标分别是 (10,11)(11,1) ,分别会处理为 10*10+11=11111*10+1=111 ,两个不同坐标会被 set 去重


by Yzc10729 @ 2024-10-30 21:24:34

@QyGyQ 哦哦,谢谢提醒


by nyk1315 @ 2024-10-30 21:33:42

@Yzc10729 我也60 撞头像

#include<bits/stdc++.h>
using namespace std;
char a[1001][1001];
int main(){
    int t;
    cin>>t;
    while(t--){
        int n,m,k,x,y,d;
        cin>>n>>m>>k;
        cin>>x>>y>>d;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>a[i][j];
        int sum=1;
        while(k--){
            bool f=0;
            a[x][y]='-';
            if(d==0&&a[x][y+1]!='x'&&y+1<=m){
                if(a[x][y+1]=='.')
                    sum++;
                y++;
                continue;
            }
            if(d==1&&a[x+1][y]!='x'&&x+1<=m){
                if(a[x+1][y]=='.')
                    sum++;
                x++;
                continue;
            }
            if(d==2&&a[x][y-1]!='x'&&y-1>0){
                if(a[x][y-1]=='.')
                    sum++;
                y--;
                continue;
            }
            if(d==3&&a[x-1][y]!='x'&&x-1>0){
                if(a[x-1][y]=='.')
                    sum++;
                x--;
                continue;
            }
            d=(d+1)%4;
        }
        cout<<sum<<endl;
    }
    return 0;
}

by Yzc10729 @ 2024-10-30 22:58:28

@nyk1315 呵呵,我AC了


|