60wa求调

P11228 [CSP-J 2024] 地图探险

GDDS @ 2025-01-05 09:36:42

评测记录

#include<bits/stdc++.h>
using namespace std;
int cnt=1,f,t,n,m,k,x,y,z;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0},vis[1005][1005];
char a[1005][1005];
int main(){
//  freopen("explore.in","r",stdin);
//  freopen("explore.out","w",stdout);
    cin>>t;
    while(t--){
        cin>>n>>m>>k>>x>>y>>z;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)   
                cin>>a[i][j];
        vis[x][y]=1;
        while(k){
            if(a[x+dx[z]][y+dy[z]]=='.'){
                k--;
                x+=dx[z];
                y+=dy[z];
                if(!vis[x][y]) cnt++,vis[x][y]=1;
            }
            else z=(z+1)%4,k--;
        }
        cout<<cnt<<endl;
        f=0;
        memset(vis,0,sizeof(vis));
        cnt=1;
    }
}

by Ybll_ @ 2025-01-05 09:52:31

@GDDS

献上蒟蒻的丑陋代码。

#include<bits/stdc++.h>
using namespace std;
long long mp[1005][1005];
void slove()
{
    long long n,m,k,d=0,x=0,y=0,ans=0;
    cin>>n>>m>>k>>x>>y>>d;
    if(k>1e7)k=1e7;
    x--;
    y--;
    memset(mp,0,sizeof(mp));
    for(long long i=0;i<n;i++)
    {
        string s;
        cin>>s;
        for(long long j=0;j<m;j++)
        {
            if(s[j]=='.')mp[i][j]=1;
            else mp[i][j]=0;
        }
    }
    while(k--)
    {
        if(d==0)
        {
            if(mp[x][y+1]!=0&&y+1<m)
            {
                if(mp[x][y]==1)ans++;
                mp[x][y]=-1;
                y++;
            }
            else d++;
            continue;
        }
        if(d==1)
        {
            if(mp[x+1][y]!=0&&x+1<n)
            {
                if(mp[x][y]==1)ans++;
                mp[x][y]=-1;
                x++;
            }
            else d++;
            continue;
        }
        if(d==2)
        {
            if(mp[x][y-1]!=0&&y-1>-1)
            {
                if(mp[x][y]==1)ans++;
                mp[x][y]=-1;
                y--;
            }
            else d++;
            continue;
        }
        if(d==3)
        {
            if(mp[x-1][y]!=0&&x-1>-1)
            {
                if(mp[x][y]==1)ans++;
                mp[x][y]=-1;
                x--;
            }
            else d++;
        }
        if(d==4)d=0;
    }
    if(mp[x][y]==1)ans++;
    cout<<ans<<"\n";
    return;
}
int main()
{
//  freopen("explore.in","r",stdin);
//  freopen("explore.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    long long t;
    cin>>t;
    while(t--)
    {
        slove();
    }
    return 0;
}

求关


by JYC130604 @ 2025-01-05 09:59:20

我的丑陋代码

#include  <bits/stdc++.h>
using namespace std;
int t,n,m,k,x,y,d,sum,vis[1005][1005],dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
char mp[1005][1005];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>t;
    while(t--){
        sum=0;
        memset(vis,0,sizeof(vis));
        cin>>n>>m>>k>>x>>y>>d;
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mp[i][j];
        mp[x][y]='@';
        for(int i=1;i<=k;i++){
            int fx=x+dx[d];
            int fy=y+dy[d];
            if(fx>0 && fx<=n && fy>0 && fy<=m && mp[fx][fy]!='x'){
                x=fx;
                y=fy;
                mp[x][y]='@';
            }
            else d=(d+1)%4;
        }
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(mp[i][j]=='@') sum++;
        cout<<sum<<endl;
    }
    return 0;
}

禁止口无遮拦

求关


by cc_tcpt @ 2025-01-08 17:06:59

因为你是直接用当前位置加方向去判断,所以你的a数组是需要复位的,如果a数组没有复位有可能导致上一次数组会影响下一次的


|