提交记录。
代码:
#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;
}