MAGCARI

Robot

Sep 7th, 2022
682
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. /*
  2.     Task        : Robot
  3.     Author      : Phumipat C. [MAGCARI]
  4.     Language    : C++
  5. */
  6. #include<bits/stdc++.h>
  7. using namespace std;
  8. struct A{
  9.     int i,j,w;
  10. };
  11. queue<A > que;
  12. int dir[2][4] = {{1,-1,0,0},{0,0,1,-1}};
  13. char a[2010][2010];
  14. int mark[2010][2010];
  15. int main(){
  16.     int n,m,all = 0;
  17.     scanf("%d %d",&n,&m);
  18.     for(int i=1;i<=n;i++){
  19.         for(int j=1;j<=m;j++){
  20.             scanf(" %c",&a[i][j]);
  21.             if(a[i][j] == 'X')
  22.                 que.push({i,j,0}),mark[i][j] = 1;
  23.             else if(a[i][j] == 'A')
  24.                 all++;
  25.         }
  26.     }
  27.     int ans = 0,cnt = 0;
  28.     while(!que.empty()){
  29.         A now = que.front();
  30.         que.pop();
  31.         if(a[now.i][now.j] == 'A'){
  32.             a[now.i][now.j] = 'E';
  33.             ans+=now.w*2;
  34.             cnt++;
  35.         }
  36.         if(cnt == all)  break;
  37.         for(int k=0;k<4;k++){
  38.             int ni = now.i + dir[0][k];
  39.             int nj = now.j + dir[1][k];
  40.             if(ni < 1 || nj < 1 || ni > n || nj > m)    continue;
  41.             if(mark[ni][nj] || a[ni][nj] == 'W')        continue;
  42.             mark[ni][nj] = 1;
  43.             que.push({ni,nj,now.w+1});
  44.         }
  45.     }
  46.     printf("%d %d\n",cnt,ans);
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment