fork download
  1. #include<cstdio>
  2. #define max(a,b) (a)>(b)?(a):(b)
  3. int n,m,a[1505][1505],cnt,s[100005],starcnt,maxstar,fx[8][2]={{0,1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
  4. bool vis[1505][1505];
  5. void dfs(int sx,int sy)//深搜
  6. {
  7. cnt++;
  8. vis[sx][sy]=true;
  9. for(int i=0;i<8/*因为方向是8个方向*/;i++)
  10. if(!vis[sx+fx[i][0]][sy+fx[i][1]]&&a[sx+fx[i][0]][sy+fx[i][1]])
  11. dfs(sx+fx[i][0],sy+fx[i][1]);
  12. }
  13. int main()
  14. {
  15. scanf("%d %d\n",&n,&m);
  16. for(int i=1;i<=n;i++)
  17. {
  18. char putin[1505];
  19. scanf("%s\n",putin+1);
  20. for(int j=1;j<=m;j++)
  21. a[i][j]=putin[j]=='.'?0:1;
  22. }
  23. for(int i=1;i<=n;i++)
  24. for(int j=1;j<=m;j++)
  25. if(!vis[i][j]&&a[i][j])
  26. {
  27. cnt=0;
  28. dfs(i,j);
  29. s[cnt]++;
  30. }
  31. for(int i=1;i<100000;i++)
  32. if(s[i])
  33. {
  34. starcnt++;
  35. maxstar=max(maxstar,i*s[i]);
  36. }
  37. printf("%d %d",starcnt,maxstar);
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 4508KB
stdin
10 10
**..**.**.
***....*..
*...**.**.
...*..*...
..........
**...**.*.
..*.*....*
..........
***..*.*..
.***..*...
stdout
4 12