80pts求调(玄关)

P11228 [CSP-J 2024] 地图探险

markkkk @ 2025-01-07 22:42:30

#include<bits/stdc++.h>
using namespace std;
int t;
int n,m,k;
int x,y,d;
int a[1005][1005];
int b[1005][1005];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int main(){
    cin>>t;
    while(t--){
        memset(a,sizeof(a),0); 
        memset(b,sizeof(b),0);
        n=m=k=x=y=d=0;
        cin>>n>>m>>k;
        cin>>x>>y>>d;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                b[i][j]=0;
                char c;
                cin>>c;
                if(c=='.'){
                    a[i][j]=1;
                } 
                else if(c=='x'){
                    a[i][j]=0;
                } 
            }
        }
        int cnt=0;
        b[x][y]=1;
        for(int i=1;i<=k;i++){
            int nx=x+dx[d],ny=y+dy[d];
            if(a[nx][ny]==1){
                x=nx,y=ny;
                b[x][y]=1; 
            } 
            else{
                d=(d+1)%4;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cnt+=b[i][j];
            }
        }
        cout<<cnt<<"\n";
    }
    return 0;
}

by wangshengchen @ 2025-01-08 00:01:33

#include<iostream>
using namespace std;
const int N=1e3+10;
int t,n,m,k,x,y,d,ans,d2[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//d是方向 
string s;
int main(){
    ios::sync_with_stdio(0); 
    cin.tie(0);
    cin>>t;
    while(t--){
        cin>>n>>m>>k>>x>>y>>d;
        char map[N][N]={};
        bool vis[N][N]={};
        for(int i=1;i<=n;i++){
            cin>>s;//用字符串输入快 
            int len=s.size();
            for(int j=0;j<len;j++) map[i][j+1]=s[j];//存到字符数组里 
        }
        ans=1;//起点也有一步
        vis[x][y]=1;//判断走过的(可能有重复的) 
        while(k--){
            int nx=d2[d][0]+x,ny=d2[d][1]+y;//现在的x,y坐标 
            if(nx>0&&nx<n+1&&ny>0&&ny<m+1&&map[nx][ny]!='x'){//判断可不可以走 
                x=nx;
                y=ny;
                if(!vis[nx][ny]){//加个数
                    vis[nx][ny]=1;
                    ans++; 
                }
            }
            else d=(d+1)%4;//转向
        }
        cout<<ans<<"\n";
    }
    return 0;
}

求关


by markkkk @ 2025-01-08 16:01:54

感谢,已关


by markkkk @ 2025-01-08 16:10:21

其实错误在memset,其实它不能清空二维数组,所以要用二层循环


by cc_tcpt @ 2025-01-08 17:16:01

@markkkk是你memset写错了吧,格式应该是memset(a,0,sizeof(a))吧。


by markkkk @ 2025-01-08 17:36:20

@cc_tcpt 我撤回我的回复中第二句话(


by markkkk @ 2025-01-08 17:36:53

谢谢大佬,已关


by markkkk @ 2025-01-08 17:37:41

我指wangshengchen(


|