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);
  6. for(int i=0;i<H;i++) cin>>S[i];
  7. queue<pair<int,int>> q;
  8. for(int i=0;i<H;i++)
  9. for(int j=0;j<W;j++)
  10. if(S[i][j]=='#') q.push({i,j});
  11. int dx[]={1,-1,0,0}, dy[]={0,0,1,-1};
  12. while(!q.empty()){
  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 cnt=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]=='#') cnt++;
  21. }
  22. if(cnt==1){
  23. S[ni][nj]='#';
  24. q.push({ni,nj});
  25. }
  26. }
  27. }
  28. int ans=0;
  29. for(auto &row:S) for(char c:row) ans+=c=='#';
  30. cout<<ans;
  31. }
Success #stdin #stdout 0.01s 5320KB
stdin
10 10
..........
....#.....
#.......#.
......#...
.......#..
.....#....
..........
..........
..#...#...
.......#..
stdout
61