求调
查看原帖
求调
1054001
_Lazy_zhr_楼主2025/2/5 12:59

提交记录

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mx[4]={-1,1,0,0};
const int my[4]={0,0,-1,1};
int n,m,ans;
char f[1005][1005];
void solve(){
	queue< pair<int,int> > q;
	int s=0;
	bool x=false;
	cin>>n>>m;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
		cin>>f[i][j];
		if(f[i][j]=='#') x=true;
	} if(!x){
		cout<<"0\n";
		return ;
	} for(int i=1;i<=n;i++){
		x=false,s=0;
		for(int j=1;j<=m;j++) if(f[i][j]=='#'){
			x=true;
			if(s&&j-s>1){
				cout<<"-1\n";
				return ;
			} s=j;
		} if(!x){
			cout<<"-1\n";
			return ;
		}
	} for(int j=1;j<=m;j++){
		x=false,s=0;
		for(int i=1;i<=n;i++) if(f[i][j]=='#'){
			x=true;
			if(s&&i-s>1){
				cout<<"-1\n";
				return ;
			} s=i;
		} if(!x){
			cout<<"-1\n";
			return ;
		}
	} for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(f[i][j]=='#'){
		ans++;
		f[i][j]='.';
		q.push({i,j});
		while(q.size()){
			int fx=q.front().first,fy=q.front().second;
			q.pop();
			for(int k=0;k<4;k++){
				int nx=fx+mx[k],ny=fy+my[k];
				if(nx>0&&nx<=n&&ny>0&&ny<=m&&f[nx][ny]=='#'){
					q.push({nx,ny});
					f[nx][ny]='.';
				}
			}
		}
	}
	cout<<ans<<"\n";
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int T=1;
//	cin>>T;
	while(T--) solve();
	return 0;
}
2025/2/5 12:59
加载中...