Advertisement
Yahya-Ak-Ayoub

D_Igor_In_the_Museum

Nov 16th, 2020
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.78 KB | None | 0 0
  1.  
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import static java.lang.Integer.parseInt;
  8. import java.util.ArrayDeque;
  9. import java.util.Queue;
  10. import java.util.StringTokenizer;
  11.  
  12. public class D_Igor_In_the_Museum {
  13.  
  14.     static BufferedReader reader;
  15.     static StringTokenizer tok;
  16.     static int n, m, k, count, moveX[] = {-1, 1, 0, 0}, moveY[] = {0, 0, 1, -1};
  17.     static char grid[][];
  18.     static boolean visited[][];
  19.     static Queue<pair> q, qK;
  20.     static BufferedWriter writer;
  21.  
  22.     public static void main(String[] args) throws IOException {
  23.         Input();
  24.         writer = new BufferedWriter(new OutputStreamWriter(System.out));
  25.          while (!qK.isEmpty()) {
  26.             pair obj = qK.poll();
  27.             procce(obj.x, obj.y);
  28.         }
  29.          writer.flush();
  30.     }
  31.  
  32.     public static void Input() throws IOException {
  33.         reader = new BufferedReader(new InputStreamReader(System.in));
  34.         tok = new StringTokenizer(reader.readLine());
  35.         n = parseInt(tok.nextToken()) + 1;
  36.         m = parseInt(tok.nextToken()) + 1;
  37.         k = parseInt(tok.nextToken());
  38.         grid = new char[n][m];
  39.         for (int i = 1; i < n; i++) {
  40.             grid[i] = ('x' + reader.readLine()).toCharArray();
  41.         }
  42.  
  43.         qK = new ArrayDeque<pair>();
  44.  
  45.         for (int tc = 0; tc < k; tc++) {
  46.             tok = new StringTokenizer(reader.readLine());
  47.             qK.add(new pair(parseInt(tok.nextToken()), parseInt(tok.nextToken())));
  48.         }
  49.     }
  50.  
  51.     public static void procce(int x, int y) throws IOException {
  52.         q = new ArrayDeque<pair>();
  53.         q.add(new pair(x, y));
  54.         visited = new boolean[n][m];
  55.         visited[x][y] = true;
  56.         count = 0;
  57.        
  58.         while (!q.isEmpty()) {
  59.            
  60.             pair obj = q.poll();
  61.  
  62.             for (int i = 0; i < 4; i++) {
  63.                 int newX = obj.x + moveX[i], newY = obj.y + moveY[i];
  64.  
  65.                 if (!(newX < 1 || newX >= n || newY < 1 || newY >= m || visited[newX][newY])) {
  66.                     switch (grid[newX][newY]) {
  67.                         case '.':
  68.                             visited[newX][newY] = true;
  69.                             q.add(new pair(newX, newY));
  70.                             break;
  71.                         default:
  72.                             count++;
  73.                             break;
  74.                     }
  75.                 }
  76.             }
  77.         }
  78.         writer.write( count +"\n" );
  79.     }
  80.  
  81.     static class pair {
  82.  
  83.         int x, y;
  84.  
  85.         public pair(int x, int y) {
  86.             this.x = x;
  87.             this.y = y;
  88.         }
  89.  
  90.     }
  91. }
  92. /*
  93. 5 6 3
  94. ******
  95. *..*.*
  96. ******
  97. *....*
  98. ******
  99. 2 2
  100. 2 5
  101. 4 3
  102.  
  103.  
  104.  */
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement