fork download
  1. #include <bits/stdc++.h>
  2. #include <ext/numeric>
  3. using namespace std;
  4. using namespace __gnu_cxx;
  5.  
  6. #define sz(x) (int)x.size()
  7.  
  8. int n,m;
  9. char arr[1010][1010];
  10. int vis[1010][1010];
  11. int num[1010][1010];
  12. int visId;
  13. int cnt[1010];
  14. int dx[4]={1,-1,0,0};
  15. int dy[4]={0,0,1,-1};
  16.  
  17. void dfs(int r,int c){
  18. if(r<0||c<0||r>=n||c>=m)return;
  19. if(vis[r][c]||arr[r][c]=='*')return;
  20. vis[r][c]=1;
  21. num[r][c]=visId;
  22. cnt[visId]++;
  23. for(int i=0;i<4;i++)
  24. dfs(r+dx[i],c+dy[i]);
  25. return;
  26. }
  27.  
  28. int main() {
  29. #ifndef ONLINE_JUDGE
  30. freopen("input.txt", "rt", stdin);
  31. // freopen("output.txt", "wt", stdout);
  32. #endif
  33. scanf("%d %d",&n,&m);
  34. for(int i=0;i<n;i++)
  35. for(int j=0;j<m;j++)
  36. scanf(" %c",&arr[i][j]);
  37. for(int i=0;i<n;i++)
  38. for(int j=0;j<m;j++){
  39. if(vis[i][j]||arr[i][j]=='*')continue;
  40. visId++;
  41. dfs(i,j);
  42. }
  43.  
  44. for(int i=0;i<n;i++){
  45. for(int j=0;j<m;j++){
  46. if(arr[i][j]=='.'){
  47. printf(".");
  48. continue;
  49. }
  50. set<int> st;
  51. if(i>0&&arr[i-1][j]=='.')st.insert(num[i-1][j]);
  52. if(i<n-1&&arr[i+1][j]=='.')st.insert(num[i+1][j]);
  53. if(j>0&&arr[i][j-1]=='.')st.insert(num[i][j-1]);
  54. if(j<m-1&&arr[i][j+1]=='.')st.insert(num[i][j+1]);
  55. int ans=1;
  56. for(set<int>::iterator it=st.begin();it!=st.end();it++)
  57. ans+=cnt[*it];
  58. printf("%d",ans%10);
  59. }
  60. cout<<"\n";
  61. }
  62. }
Success #stdin #stdout 0s 12432KB
stdin
12 1
************
stdout
1
1
1
1
1
1
1
1
1
1
1
1