70分RE!!(求大佬,会关注的)

P1141 01迷宫

YM_1 @ 2024-07-18 16:36:25

#include <bits/stdc++.h>
using namespace std;
int n,m,ma[1000][10000],book[1000][10000];
struct node{
    int x,y,step;
}q[101011000];
int bfs(int sx,int sy){
    int head=0,tail=0;
    q[tail].x=sx;
    q[tail].y=sy;
    q[tail].step=ma[sx][sy];
    int sum=1;
    book[sx][sy]=1;
    tail++;
    int nex[4][2]={{0,1},
                   {1,0},
                   {0,-1},
                   {-1,0}};
    while(head<tail){
        node h=q[head];
        for(int k=0;k<4;k++){
            int tx=h.x+nex[k][0];
            int ty=h.y+nex[k][1];
            if(tx<1||tx>n||ty<1||ty>n)
                continue;
            if(book[tx][ty])    
                continue;
            if((ma[tx][ty]==0&&h.step==1)||(ma[tx][ty]==1&&h.step==0)){
                sum++;
                q[tail].x=tx;
                q[tail].y=ty;
                q[tail].step=ma[tx][ty];
                book[tx][ty]=1;
                tail++;
            }
        }
        head++;
    }
    return sum;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        string s;
        cin>>s;
        for(int j=0;j<n;j++){
            ma[i][j+1]=s[j]-'0';
        }
    }
//  for(int i=1;i<=n;i++){
//      for(int j=1;j<=m;j++)
//          cout<<ma[i][j]<<" ";
//      cout<<endl;
//  }
    for(int i=1;i<=m;i++){
        int ssx,ssy;
        cin>>ssx>>ssy;
        memset(book,0,sizeof(book));
        int ans=bfs(ssx,ssy);
        cout<<ans<<endl;
    }

    return 0;
}

by YM_1 @ 2024-07-18 16:38:10

测评详情

\ ^\ |\ 点这里


by wangif424 @ 2024-07-18 16:42:09

@Zhourenyu0214 [1000] -> [1001]


by zhaohanyu0920 @ 2024-07-18 16:45:04

开数组建议大至少5位 卡死容易RE


by An_Idiot @ 2024-07-18 16:48:32

@wangif424 @zhayu__artgx 会超时吧。。


by An_Idiot @ 2024-07-18 16:50:58

@Zhourenyu0214 建议你重构,下面是我的,你当个参考。

#include<bits/stdc++.h>
using namespace std;
long long n,m;
char a[1005][1005];
long long bj[1005][1005];
long long ans[100005];
void dfs(long long x,long long y,long long k,long long M)
{
    if(bj[x][y]!=-1 || a[x][y]!=k || x>n || x<1 || y>n || y<1) return;
    bj[x][y]=M,ans[M]++;
    dfs(x+1,y,!k,M);
    dfs(x-1,y,!k,M);
    dfs(x,y+1,!k,M);
    dfs(x,y-1,!k,M);
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j],a[i][j]-='0',bj[i][j]=-1;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        if(bj[x][y]==-1) dfs(x,y,a[x][y],i);
        else ans[i]=ans[bj[x][y]];
        cout<<ans[i]<<endl;
    }
    return 0;

} 

by zhaohanyu0920 @ 2024-07-18 17:20:39

@An_Idiot ?空间复杂度增加跟时间复杂度没关系啊


by An_Idiot @ 2024-07-18 18:02:20

@zhayu__artgx 改完空间之后RE变成了TE


by YM_1 @ 2024-07-19 16:06:39

@An_Idiot \ \ 谢谢,但是问一下,这道题用bfs能解吗?(来自蒟蒻的提问)


by An_Idiot @ 2024-07-19 16:08:23

@Zhourenyu0214 应该是可以的吧。。我用 BFS 调了好久,最后没调出来,你可以试试,加油,你也可以看看题解


by YM_1 @ 2024-07-19 16:09:56

Thanks♪(・ω・)ノ(已关注,求互关)


| 下一页