求助各位大佬,0分。
#include<bits/stdc++.h>
using namespace std;
int n,m;
int sum[1000010],sum1=0,cnt=0,sum2=0;
long long hasht[100010];
long long maxx=-1e15;
string a[1510];
bool f[1510][1510];
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
void bfs(int x,int y){
queue< pair<int,int> >q;
q.push({x,y});
f[x][y]=true;
sum1++;
while(!q.empty()){
pair<int,int> t=q.front();
q.pop();
for(int i=0;i<8;i++){
int x2=t.first+dx[i];
int y2=t.second+dy[i];
if(x2<=0||x2>n||y2<=0||y2>m) continue;
if(a[x2][y2]=='.') continue;
if(f[x2][y2]==1) continue;
f[x2][y2]=1;
sum1++;
q.push({x2,y2});
}
}
}
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]="."+a[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='*'&&f[i][j]==false){
sum1=0;
bfs(i,j);
sum[++cnt]=sum1;
}
}
}
for(int i=1;i<=cnt;i++){
hasht[sum[i]]++;
}
for(long long i=1;i<=100010;i++){
if(hasht[i]>0){
sum2++;
if(hasht[i]*i>maxx){
maxx=hasht[i]*i;
}
}
}
cout<<sum2<<" "<<maxx<<endl;
return 0;
}