Implementation
that_pool.cpp
Wrap
Copy code
Full screen
C++
1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 void print (vector < vector < char >> & grid){
6 for (int i = 0 ; i < grid.size (); i++ ){
7 for (int j = 0 ; j < grid[i].size (); j++ ){
8 cout << grid[i][j];
9 }
10 cout << '\n' ;
11 }
12 }
13 void move_blood (vector < vector < char >> & v){
14
15 bool stuck = true ;
16 while (true ){
17 stuck = true ;
18 for (int i = 0 ; i < v.size (); i++ ){
19 for (int j = 0 ; j < v[i].size (); j++ ){
20 if (v[i][j] == 'W' ){
21 while (j > 0 && v[i][j - 1 ] == '.' ){
22 v[i][j - 1 ] = 'W' ;
23 v[i][j] = '.' ;
24 j-- ;
25 stuck = false ;
26 }
27 }
28 }
29 }
30
31 vector < pair < int ,int >> drop;
32 for (int i = 0 ; i < v.size () - 1 ; i++ )
33 for (int j = 0 ; j < v[i].size (); j++ )
34 if (v[i][j] == 'W' && v[i + 1 ][j] == '.' )
35 drop.push_back ({i, j});
36
37 if (! drop.empty ()) stuck = false ;
38 for (auto [i, j] : drop){
39 v[i + 1 ][j] = 'W' ;
40 v[i][j] = '.' ;
41 }
42
43 if (stuck) break ;
44 }
45 }
46 int main (){
47 ios:: sync_with_stdio (0 );
48 cin.tie (0 );
49 int n, m, q;
50 cin >> n >> m;
51 vector < vector < char >> pool (n, vector < char > (m));
52 for (int i = 0 ; i < n; i++ ){
53 for (int j = 0 ; j < m; j++ ){
54 cin >> pool[i][j];
55 }
56 }
57 cin >> q;
58
59 while (q-- ){
60 int op;
61 cin >> op;
62 if (op == 2 ){
63 print (pool);
64 } else {
65
66
67
68 for (int i = pool.size () - 1 ; i >= 0 ; i-- ){
69 for (int j = 0 ; j < pool[i].size (); j++ ){
70 if (pool[i][j] == 'X' && i == pool.size () - 1 ){
71 pool[i][j] = '.' ;
72 } else if (pool[i][j] == 'X' ){
73 pool[i + 1 ][j] = 'X' ;
74 pool[i][j] = '.' ;
75 }
76 }
77 }
78 move_blood (pool);
79 }
80 }
81 return 0 ;
82 }
83