fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int H,W; cin>>H>>W;
  5. vector<string> S(H); for(int i=0;i<H;i++) cin>>S[i];
  6. int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
  7. queue<pair<int,int>> q;
  8. for(int i=0;i<H;i++) for(int j=0;j<W;j++) if(S[i][j]=='#') q.push({i,j});
  9. while(!q.empty()){
  10. int sz=q.size();
  11. vector<pair<int,int>> nxt;
  12. for(int t=0;t<sz;t++){
  13. auto [i,j]=q.front(); q.pop();
  14. for(int k=0;k<4;k++){
  15. int ni=i+dx[k], nj=j+dy[k];
  16. if(ni<0||ni>=H||nj<0||nj>=W||S[ni][nj]!='.') continue;
  17. int c=0;
  18. for(int l=0;l<4;l++){
  19. int ti=ni+dx[l], tj=nj+dy[l];
  20. if(ti>=0&&ti<H&&tj>=0&&tj<W&&S[ti][tj]=='#') c++;
  21. }
  22. if(c==1) nxt.push_back({ni,nj});
  23. }
  24. }
  25. if(nxt.empty()) break;
  26. for(auto [i,j]:nxt) S[i][j]='#', q.push({i,j});
  27. }
  28. int ans=0; for(auto &r:S) for(char c:r) ans+=c=='#';
  29. cout<<ans;
  30. }
Success #stdin #stdout 0.01s 5308KB
stdin
10 10
..........
....#.....
#.......#.
......#...
.......#..
.....#....
..........
..........
..#...#...
.......#..
stdout
64