http://icpc.upc.edu.cn/problem.php?id=11307
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
char c[100][100],c1[100][100];
int d[4][2]= {{1,0},{0,1},{-1,0},{0,-1}},ans1,ans2,sum,max1,max2,min1,min2,ans,f,i,k1,j,m,n,k;
void dfs(int x,int y)
{
sum++;
c1[x][y]='.';
max1=max(max1,x);
max2=max(max2,y);
min1=min(min1,x);
min2=min(min2,y);
for (int i=0; i<4; i++)
{
int x1=x+d[i][0],y1=y+d[i][1];
if (x1>=0&&x1<n&&y1>=0&&y1<m&&c1[x1][y1]=='#')
dfs(x1,y1);
}
}
int main()
{
scanf("%d%d",&n,&m);
for (i=0; i<n; i++)
{
scanf("%s",&c[i]);
strcpy(c1[i],c[i]);
}
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
if (c1[i][j]=='#')
{
sum=0;
max1=0;
max2=0;
min1=1000;
min2=1000;
dfs(i,j);
if (sum==(max1-min1+1)*(max2-min2+1))
ans1++;
else
ans2++;
}
}
printf("%d\n%d\n",ans1,ans2);
}