被第十个测试点埋伏了!
查看原帖
被第十个测试点埋伏了!
490978
小超手123楼主2021/8/26 10:44

我第十个测试点wa了

看了一下数据n=1000,全是#号

不明白我哪里错了

大佬们帮忙看看

#include<bits/stdc++.h>
using namespace std;
struct ice{
	int s,c;
}p[100000];
struct node{
	int x,y;
};
int n,sum=0,cc;
char a[1001][1001];
int vis[1001][1001];
int next[5][3]={{1,0},{0,1},{-1,0},{0,-1}};
queue<node>Q;
int bfs(int xx,int yy){
	cc=0;
	int ans=0;
	Q.push((node){xx,yy});
	while(!Q.empty()){
		node now=Q.front();
		Q.pop();
		for(int i=0;i<4;i++){
			int dx=now.x+next[i][0],dy=now.y+next[i][1];
			if(dx<1||dx>n||dy<1||dy>n||vis[dx][dy]==1||a[dx][dy]=='.')continue;
			vis[dx][dy]=1;
			Q.push((node){dx,dy});
			ans++;
			for(int i=0;i<4;i++){
				int tx=dx+next[i][0],ty=dy+next[i][1];
				if(a[tx][ty]!='#'||tx<1||tx>n||ty<1||ty>n)
				cc++;
			}
		}
	}
	return ans;
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		if(a[i][j]=='#'&&vis[i][j]==0){
    			sum++;
    			p[sum].s=bfs(i,j);
    			p[sum].c=cc;
			}
		}
	}
	ice maxn;
	maxn.s=0,maxn.c=100000;
	for(int i=1;i<=sum;i++){
		if(maxn.s!=p[i].s){
			if(p[i].s>maxn.s)maxn=p[i];
		}
		else{
			if(p[i].c<maxn.c)maxn=p[i];
		}
	}
	cout<<maxn.s<<" "<<maxn.c;
    return 0;
}




2021/8/26 10:44
加载中...