本人用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) 回帖