40分蒟蒻求调

P11228 [CSP-J 2024] 地图探险

awdfkewd @ 2024-12-07 18:37:01

#include<iostream>
#include<cstring>
using namespace std;
char map[1000][1000];
int t,n,m,k,x,y,d,ans;
int ax,ay;
int main(){
    cin>>t;
    for(int i=0;i<t;i++){
        ans=0;
        cin>>n>>m>>k>>x>>y>>d;
        x--;
        y--;
        for(int j=0;j<n;j++){
            for(int k=0;k<m;k++){
                cin>>map[j][k];
            }
        }
        map[x][y]='1';
        for(int j=0;j<k;j++){
            ax=0;
            ay=0;
            if(d==0){
                ay=1;
            }else if(d==1){
                ax=1;
            }else if(d==2){
                ay=-1;
            }else{
                ax=-1;
            }
            if(map[x+ax][y+ay]=='.'){
                x+=ax;
                y+=ay;
                map[x][y]='1';
            }else{
                d=(d+1)%4;
            }
        }
        for(int j=0;j<n;j++){
            for(int k=0;k<m;k++){
                if(map[j][k]=='1'){
                    ans++;
                }
            }
        }
        cout<<ans;
    }
    return 0;
}

by xyx404 @ 2024-12-07 18:39:37

@awdfkewd

根据你的代码改的。

修改原因看注释,不懂 @ 我问。

#include<iostream>
#include<cstring>
using namespace std;
char map[1000][1000];
int t,n,m,k,x,y,d,ans;
int ax,ay;
int main(){
    cin>>t;
    for(int i=0;i<t;i++){
        ans=0;
        cin>>n>>m>>k>>x>>y>>d;
        x--;
        y--;
        for(int j=0;j<n;j++){
            for(int k=0;k<m;k++){
                cin>>map[j][k];
            }
        }
        map[x][y]='1';
        for(int j=0;j<k;j++){
            ax=0;
            ay=0;
            if(d==0){
                ay=1;
            }else if(d==1){
                ax=1;
            }else if(d==2){
                ay=-1;
            }else{
                ax=-1;
            }
            if(x+ax>=0&&y+ay>=0&&x+ax<n&&y+ay<m&&map[x+ax][y+ay]!='x'){// 此处考虑边界同时因为下面修改了 map 但是是可以重复走的所以条件改成 map[x+ax][y+ay]!='x' 
                x+=ax;
                y+=ay;
                map[x][y]='1';
            }else{
                d=(d+1)%4;
            }
        }
        for(int j=0;j<n;j++){
            for(int k=0;k<m;k++){
                if(map[j][k]=='1'){
                    ans++;
                }
            }
        }
        cout<<ans<<"\n";// 要换行 
    }
    return 0;
}

by awdfkewd @ 2024-12-07 18:51:48

@xyx404谢谢带佬,已关


|