太难了!
查看原帖
太难了!
1251294
20190209x楼主2024/11/30 17:32
#include<bits/stdc++.h>
using namespace std;
int n,a[1010][1010],summ;
char b[1010][1010];
int g[3][1000000],f,r,dx[5]={0,0,-1,0,1},dy[5]={0,-1,0,1,0};
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>b[i][j];
			if(b[i][j]=='#'){
				a[i][j]=1;
			}
		}
	}
	for(int i=2;i<=n-1;i++){
		for(int j=2;j<=n-1;j++){
			if(a[i][j]==1){
				for(int k=1;k<=4;k++){
					int x=i+dx[k],y=j+dy[k];
					if(a[x][y]==0){
						a[i][j]=2;
						break;
					}
				}
			}
		}
	}
/*	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}*/
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]==2){
                bool flag=1;
				r=f=1;
				g[1][r]=i;
				g[2][r]=j;
				a[i][j]=0;
				while(r>=f){
					for(int k=1;k<=4;k++){
						int x=g[1][f]+dx[k],y=g[2][f]+dy[k];
						if(a[x][y]==1){
							flag=0;
							a[x][y]=0;
						}
						if(a[x][y]==2){
							r++;
							g[1][r]=x;
							g[2][r]=y;
							a[x][y]=0;
						}
					}
					f++;
				}
				if(flag){
					++summ;
				}
			}
		}
	}
/*	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}*/
	cout<<summ;
	return 0;
}
2024/11/30 17:32
加载中...