50pts求助

P11228 [CSP-J 2024] 地图探险

WElastkiss @ 2024-11-01 22:44:18

#include<bits/stdc++.h>
using namespace std;
long long T, n, m, k, x, y, f, ans;
char a[1001][1001], num[1001][1001];
int main(){
    cin >> T;
    for(int i=1; i<=T; i++){
        cin >> n >> m >> k >> x >> y >> f;
        for(int j=1; j<=n; j++){
            for(int l=1; l<=m; l++){
                cin >> a[j][l];
            }
        }
        for(int j=1; j<=k; j++){
            if(f==0){
                if(a[x][y+1]=='.'){
                    y+=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f+=1;
                    //cout << "向右转" << endl;
                }
            }else if(f==1){
                if(a[x+1][y]=='.'){
                    x+=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f+=1;
                    //cout << "向右转" << endl;
                }
            }else if(f==2){
                if(a[x][y-1]=='.'){
                    y-=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f+=1;
                    //cout << "向右转" << endl;
                }
            }else if(f==3){
                if(a[x-1][y]=='.'){
                    x-=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f=0;
                    //cout << "向右转" << endl;
                }
            }
//          for(int j=1; j<=n; j++){
//              for(int l=1; l<=m; l++){
//                  if(num[i][l]==9){
//                      ans++;
//                  }
//                  cout << num[i][l] << ' ';
//                  //num[i][l]=0;
//              }
//              cout << endl;
//          }
//          for(int j=1; j<=n; j++){
//              for(int l=1; l<=m; l++){
//                  cout << num[j][l];
//              }
//              cout << endl;
//          }
        }
        //cout << "--------------------------------------------" << endl;
//      for(int j=1; j<=n; j++){
//          for(int l=1; l<=m; l++){
//              cout << num[j][l];
//          }
//          cout << endl;
//      }
        for(int j=1; j<=n; j++){
            for(int l=1; l<=m; l++){
                if(num[j][l]=='A'){
                    ans++;
                    num[j][l]=' ';
                }
            }

        }
        cout << ans+1 << endl;
        //cout << "--------------------------------------------" << endl;
        ans=0;
        for(int j=1; j<=n; j++){
            for(int l=1; l<=m; l++){
                a[j][l]=' ';
            }
        }
    }
    return 0;
}

by cleverclever @ 2024-11-02 09:14:43

稍微改了一下

#include<bits/stdc++.h>
using namespace std;
long long T, n, m, k, x, y, f, ans;
char a[1001][1001], num[1001][1001];
int main(){
    cin >> T;
    for(int i=1; i<=T; i++){
        cin >> n >> m >> k >> x >> y >> f;
        for(int j=1; j<=n; j++){
            for(int l=1; l<=m; l++){
                cin >> a[j][l];
            }
        }
        num[x][y] = 'A';
        for(int j=1; j<=k; j++){
            if(f==0){
                if(a[x][y+1]=='.' && y+1<=m){
                    y+=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f+=1;
                    //cout << "向右转" << endl;
                }
            }else if(f==1){
                if(a[x+1][y]=='.' && x+1<=n){
                    x+=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f+=1;
                    //cout << "向右转" << endl;
                }
            }else if(f==2){
                if(a[x][y-1]=='.' && y-1>=1){
                    y-=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f+=1;
                    //cout << "向右转" << endl;
                }
            }else if(f==3){
                if(a[x-1][y]=='.' && x-1>=1){
                    x-=1;
                    //cout << x << ' ' << y << endl;
                    num[x][y]='A';
                }else{
                    f=0;
                    //cout << "向右转" << endl;
                }
            }
//          for(int j=1; j<=n; j++){
//              for(int l=1; l<=m; l++){
//                  if(num[i][l]==9){
//                      ans++;
//                  }
//                  cout << num[i][l] << ' ';
//                  //num[i][l]=0;
//              }
//              cout << endl;
//          }
//          for(int j=1; j<=n; j++){
//              for(int l=1; l<=m; l++){
//                  cout << num[j][l];
//              }
//              cout << endl;
//          }
        }
        //cout << "--------------------------------------------" << endl;
//      for(int j=1; j<=n; j++){
//          for(int l=1; l<=m; l++){
//              cout << num[j][l];
//          }
//          cout << endl;
//      }
        for(int j=1; j<=n; j++){
            for(int l=1; l<=m; l++){
                if(num[j][l]=='A'){
                    ans++;
                    num[j][l]=' ';
                }
            }

        }
        cout << ans << endl;
        //cout << "--------------------------------------------" << endl;
        ans=0;
        for(int j=1; j<=n; j++){
            for(int l=1; l<=m; l++){
                a[j][l]=' ';
            }
        }
    }
    return 0;
}

by cleverclever @ 2024-11-02 09:17:33


by cleverclever @ 2024-11-02 09:20:08

还有在判断时,需要加上判断有没有超出范围的代码,比如“x-1>=1” “x+1<=n” “y+1<=m”之类的,否则会超出范围。

改一下这两个地方,就能AC了。


by WElastkiss @ 2024-11-05 09:20:08

@cleverclever 谢谢


by Wyl17370863080 @ 2024-11-05 20:10:59


using namespace std;

char a[1010][1010];
bool vis[1010][1010];
int main() {
    int T;
    cin >> T;
    while(T--) {
        int n, m, k;
        int x, y, d;
        int ans = 1;
        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];
        vis[x][y] = 1; 
        while(k--) {
             int nowx = x, nowy = y;
            if(d == 0) {          
                nowy = y + 1;
            }else if (d == 1) {   
                nowx = x + 1;
            }else if (d == 2) {   
                nowy = y - 1;
            }else if (d == 3) {  
                nowx = x - 1;
            }
            if(nowx >= 1 && nowx <= n && nowy >= 1 && nowy <= m && a[nowx][nowy] == '.') {
                x = nowx;
                y = nowy;
                if(!vis[x][y]) vis[x][y] = 1, ans++;
            }else {
                d = (d + 1) % 4;
            }
        }
        cout << ans << endl;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++)
                vis[i][j] = 0;
    }
    return 0;
}

|