我觉得样例答案应该分别是
4 3
8 9
code
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1600,nx[10]={0,-1,0,1,-1,1,-1,0,1},ny[10]={0,-1,-1,-1,0,0,1,1,1};
bool f[maxn][maxn];//NO 0,0 !!!
int num=0,mans=0,N,M,tim=0;
void tip(){
for(int i=1;i<=2e7;i++)i=i;
}
int dfs(int x,int y){
// printf("visit %d %d\n",x,y);
if(x<1||y<1||x>N||y>M) return 0;
// printf("have %d %d\n",x,y);
int rt=1;
for(int i=1;i<=8;i++){
// tip();
int vx=x+nx[i],vy=y+ny[i];
if(!f[vx][vy]){
f[vx][vy]=1;
rt+=dfs(vx,vy);
}
}
// printf("rt=%d\n",rt);
return rt;
}
int main(){
memset(f,0,sizeof(f));
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
char c;
scanf(" %c",&c);
if(c!='*') f[i][j]=1;//never read <=> have read
}
}
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
if(!f[i][j]){
f[i][j]=1;
int rt=dfs(i,j);
mans=max(rt,mans);
num++;
// printf("\n");
}
// printf("%d",f[i][j]);
}
}
printf("%d %d\n",num,mans);
return 0;
}