竞赛讨论区 > luogu上AC,这里却MLE
头像
Believe_R_
发布于 2019-10-07 13:54
+ 关注

luogu上AC,这里却MLE

本人用BFS写这题,代码在洛谷上AC了,在这里却MLE……

想了半天,把 ans 数组改小了之后还是却RE了。各位大佬们有什么办法吗?

下面为MLE代码

#include <bits/stdc++.h>
#define M 1001
using namespace std;

int n, m, maxS=0, MaxC=0;
char a[M][M];
struct Node{
    int s, c;
}ans[500000];

int cmp(Node x,Node y)
{
    if(x.s!=y.s) return x.s>y.s;
    else return x.c<y.c;
}

void init()
{
    for(int i=1;i<=n;++i)
      for(int j=1;j<=n;++j)
        cin>>a[i][j];
    // for(int j=0;j<=n+1;++j) a[0][j]='x', a[n+1][j]='x';
    // for(int i=0;i<=n+1;++i) a[i][0]='x', a[i][n+1]='x';
}

void Bfs(int i,int j,int k)
{
    ans[k].s++;
    a[i][j]='o';
    if(i-1<1) ans[k].c++; if(i+1>n) ans[k].c++; if(j-1<1) ans[k].c++; if(j+1>n) ans[k].c++;
    if(a[i+1][j]=='.' && i+1<=n) ans[k].c++;
    if(a[i-1][j]=='.' && i-1>=1) ans[k].c++;
    if(a[i][j-1]=='.' && j-1>=1) ans[k].c++;
    if(a[i][j+1]=='.' && j+1<=n) ans[k].c++;

    if(i-1>=1 && a[i-1][j]=='#') Bfs(i-1,j,k); 
    if(i+1<=n && a[i+1][j]=='#') Bfs(i+1,j,k); 
    if(j-1>=1 && a[i][j-1]=='#') Bfs(i,j-1,k); 
    if(j+1<=n && a[i][j+1]=='#') Bfs(i,j+1,k);
}

int main()
{
    scanf("%d",&n);
    init();
    int k=0;
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
        {
            if(a[i][j]=='#') 
            {
                k++;
                Bfs(i,j,k);
            }
        }
    }
    sort(ans+1,ans+k+1,cmp);
    printf("%d %d\n",ans[1].s,ans[1].c);
    return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐