#include "bits/stdc++.h" using namespace std; #define endl "\n" int main() { ios_base::sync_with_stdio(false); cin.tie(0); int N, M; cin >> N >> M; vector<vector<char>> Liczby(N, vector<char>(M)); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> Liczby[i][j]; } } int k; cin >> k; vector<char> napis(k); int poz = 0; int pion = 0; for (int i = 0; i < napis.size(); i++) { cin >> napis[i]; } char znak = napis[0]; int index1 = 0; int index2 = 0; vector<char> czter1(3); vector<char> czter2(3); if(znak == 'L' || znak == 'P'){ for(int i = 1; i < napis.size(); i++){ if(napis[i] != 'L' && napis[i] != 'P'){ index2 = i; } } } else if(znak == 'G' || znak == 'D'){ for(int i = 1; i < napis.size(); i++){ if(napis[i] != 'G' && napis[i] != 'D'){ index1 = i; } } } if(napis[index1] == 'L' && napis[index2] == 'G'){ czter1 = {'D', 'P', 'G' , 'L'}; czter2 = {'P', 'D', 'L', 'G'}; } else if(napis[index1] == 'L' && napis[index2] == 'D'){ czter1 = {'G', 'P', 'D' , 'L'}; czter2 = {'P', 'G', 'L', 'D'}; } else if(napis[index1] == 'P' && napis[index2] == 'G'){ czter1 = {'D', 'L', 'G' , 'P'}; czter2 = {'L', 'D', 'P', 'G'}; } else if(napis[index1] == 'P' && napis[index2] == 'D'){ czter1 = {'G', 'L', 'D' , 'P'}; czter2 = {'L', 'G', 'P', 'D'}; } int pom = 3; int index3 = 0; int index4 = 0; for(int i = napis.size() - 1; i >= 0; i--){ if(napis[i] == czter1[pom]){ index3 = i; break; } } for(int i = napis.size() - 1; i >= 0; i--){ if(napis[i] == czter2[pom]){ index4 = i; } } int minim1 = max(index1, index2); int minim2 = max(index3, index4); for (int i = 0; i <= minim1 + 1; i++) { if (napis[i] == 'G' && napis[i] != napis[i - 1] && pion != 2) { vector<int> Wsp(M, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]++; } } } pion = 2; } else if (napis[i] == 'D' && napis[i] != napis[i - 1] && pion != 1) { vector<int> Wsp(M, N - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]--; } } } pion= 1; } else if (napis[i] == 'L' && napis[i] != napis[i - 1] && poz != 2) { vector<int> Wsp(N, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]++; } } } poz = 2; } else if (napis[i] == 'P' && napis[i] != napis[i - 1] && poz != 1) { vector<int> Wsp(N, M - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]--; } } } poz = 1; } } for (int i = minim2 + 1; i < napis.size(); i++) { if (napis[i] == 'G' && napis[i] != napis[i - 1] && pion != 2) { vector<int> Wsp(M, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]++; } } } pion = 2; } else if (napis[i] == 'D' && napis[i] != napis[i - 1] && pion != 1) { vector<int> Wsp(M, N - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]--; } } } pion= 1; } else if (napis[i] == 'L' && napis[i] != napis[i - 1] && poz != 2) { vector<int> Wsp(N, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]++; } } } poz = 2; } else if (napis[i] == 'P' && napis[i] != napis[i - 1] && poz != 1) { vector<int> Wsp(N, M - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]--; } } } poz = 1; } } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << Liczby[i][j]; } cout << endl; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | #include "bits/stdc++.h" using namespace std; #define endl "\n" int main() { ios_base::sync_with_stdio(false); cin.tie(0); int N, M; cin >> N >> M; vector<vector<char>> Liczby(N, vector<char>(M)); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> Liczby[i][j]; } } int k; cin >> k; vector<char> napis(k); int poz = 0; int pion = 0; for (int i = 0; i < napis.size(); i++) { cin >> napis[i]; } char znak = napis[0]; int index1 = 0; int index2 = 0; vector<char> czter1(3); vector<char> czter2(3); if(znak == 'L' || znak == 'P'){ for(int i = 1; i < napis.size(); i++){ if(napis[i] != 'L' && napis[i] != 'P'){ index2 = i; } } } else if(znak == 'G' || znak == 'D'){ for(int i = 1; i < napis.size(); i++){ if(napis[i] != 'G' && napis[i] != 'D'){ index1 = i; } } } if(napis[index1] == 'L' && napis[index2] == 'G'){ czter1 = {'D', 'P', 'G' , 'L'}; czter2 = {'P', 'D', 'L', 'G'}; } else if(napis[index1] == 'L' && napis[index2] == 'D'){ czter1 = {'G', 'P', 'D' , 'L'}; czter2 = {'P', 'G', 'L', 'D'}; } else if(napis[index1] == 'P' && napis[index2] == 'G'){ czter1 = {'D', 'L', 'G' , 'P'}; czter2 = {'L', 'D', 'P', 'G'}; } else if(napis[index1] == 'P' && napis[index2] == 'D'){ czter1 = {'G', 'L', 'D' , 'P'}; czter2 = {'L', 'G', 'P', 'D'}; } int pom = 3; int index3 = 0; int index4 = 0; for(int i = napis.size() - 1; i >= 0; i--){ if(napis[i] == czter1[pom]){ index3 = i; break; } } for(int i = napis.size() - 1; i >= 0; i--){ if(napis[i] == czter2[pom]){ index4 = i; } } int minim1 = max(index1, index2); int minim2 = max(index3, index4); for (int i = 0; i <= minim1 + 1; i++) { if (napis[i] == 'G' && napis[i] != napis[i - 1] && pion != 2) { vector<int> Wsp(M, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]++; } } } pion = 2; } else if (napis[i] == 'D' && napis[i] != napis[i - 1] && pion != 1) { vector<int> Wsp(M, N - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]--; } } } pion= 1; } else if (napis[i] == 'L' && napis[i] != napis[i - 1] && poz != 2) { vector<int> Wsp(N, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]++; } } } poz = 2; } else if (napis[i] == 'P' && napis[i] != napis[i - 1] && poz != 1) { vector<int> Wsp(N, M - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]--; } } } poz = 1; } } for (int i = minim2 + 1; i < napis.size(); i++) { if (napis[i] == 'G' && napis[i] != napis[i - 1] && pion != 2) { vector<int> Wsp(M, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]++; } } } pion = 2; } else if (napis[i] == 'D' && napis[i] != napis[i - 1] && pion != 1) { vector<int> Wsp(M, N - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[Wsp[j]][j] = Liczby[i][j]; if (i != Wsp[j]) { Liczby[i][j] = '.'; } Wsp[j]--; } } } pion= 1; } else if (napis[i] == 'L' && napis[i] != napis[i - 1] && poz != 2) { vector<int> Wsp(N, 0); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]++; } } } poz = 2; } else if (napis[i] == 'P' && napis[i] != napis[i - 1] && poz != 1) { vector<int> Wsp(N, M - 1); for (int i = N - 1; i >= 0; i--) { for (int j = M - 1; j >= 0; j--) { if (Liczby[i][j] != '.') { Liczby[i][Wsp[i]] = Liczby[i][j]; if (j != Wsp[i]) { Liczby[i][j] = '.'; } Wsp[i]--; } } } poz = 1; } } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << Liczby[i][j]; } cout << endl; } } |