Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <set>
  5. #include <string>
  6. #include <vector>
  7. #include <algorithm>
  8. #include <bitset>
  9. #include <cmath>
  10. #include <deque>
  11. #include <map>
  12. #include <iomanip>
  13. #include <functional>
  14. #include <queue>
  15. #include <stdlib.h>
  16.  
  17. using namespace std;
  18.  
  19. const double eps = 1e-9;
  20. const long long mod = 1e9 + 7;
  21.  
  22. #define pb push_back
  23. #define F first
  24. #define S second
  25.  
  26. typedef long double ld;
  27. typedef long long ll;
  28.  
  29. void solve();
  30.  
  31. signed main() {
  32. srand('V' + 'a' + 'n' + 'k' + 'a' + 'T' + 'a' + 'g' + 'a' + 'n' + 'a' + 'i');
  33. ios_base::sync_with_stdio(0);
  34. cin.tie(0);
  35. cout.tie(0);
  36.  
  37. solve();
  38.  
  39. return 0;
  40. }
  41.  
  42. struct E {
  43. int num, r, c;
  44.  
  45. E() {}
  46.  
  47. E(int a, int b, int ca) : num(a), r(b), c(ca) {}
  48. };
  49.  
  50. void solve() {
  51. int n, k;
  52. cin >> n >> k;
  53. vector<vector<int>> v(4, vector<int>(n, 0));
  54. for (int i = 0; i < 4; i++) {
  55. for (int j = 0; j < n; j++) {
  56. cin >> v[i][j];
  57. }
  58. }
  59. int kol = 0;
  60. vector<E> e;
  61. for (int i = 0; i < n; i++) {
  62. if (v[1][i] == v[0][i] && v[1][i] != 0) {
  63. e.emplace_back(v[1][i], 1, i + 1);
  64. v[1][i] = 0;
  65. kol++;
  66. }
  67. if (v[2][i] == v[3][i] && v[2][i] != 0) {
  68. e.emplace_back(v[2][i], 4, i + 1);
  69. v[2][i] = 0;
  70. kol++;
  71. }
  72. }
  73. if (k - kol == 2 * n) {
  74. cout << -1;
  75. return;
  76. }
  77. for (int i = 0; i < n; i++) {
  78. if (v[1][i] != 0) {
  79. int j = i;
  80. while (j != 0 && v[1][j - 1] == 0) {
  81. e.emplace_back(v[1][j], 2, j);
  82. swap(v[1][j], v[1][j - 1]);
  83. j--;
  84. }
  85. }
  86. }
  87. for (int i = n - 1; i >= 0; i--) {
  88. if (v[2][i] != 0) {
  89. int j = i;
  90. while (j != n - 1 && v[2][j + 1] == 0) {
  91. e.emplace_back(v[2][j], 3, j + 2);
  92. swap(v[2][j], v[2][j + 1]);
  93. j++;
  94. }
  95. }
  96. }
  97. int x, y;
  98. if (v[1][0] != 0 && v[2][0] == 0) x = 1, y = 0;
  99. else if (v[2][n - 1] != 0 && v[1][n - 1] == 0) x = 2, y = n - 1;
  100. int nx = x, ny = y;
  101. while (kol != k) {
  102. vector<bool> used(k + 1, false);
  103. if (v[1][0] != 0 && v[2][0] == 0) nx = 1, ny = 0;
  104. else if (v[2][n - 1] != 0 && v[1][n - 1] == 0) nx = 2, ny = n - 1;
  105. else {
  106. for (int i = 1; i < n; i++) {
  107. if (v[1][i] != 0 && v[1][i - 1] == 0) {
  108. nx = 1, ny = i;
  109. break;
  110. }
  111. }
  112. for (int i = n - 2; i >= 0; i--) {
  113. if (v[2][i] != 0 && v[2][i + 1] == 0) {
  114. nx = 2, ny = i;
  115. break;
  116. }
  117. }
  118. }
  119. if (nx == 1 && ny == 0) {
  120. e.emplace_back(v[nx][ny], 3, 1);
  121. swap(v[nx][ny], v[nx + 1][ny]);
  122. nx++;
  123. }
  124. else if (nx == 2 && ny == n - 1) {
  125. e.emplace_back(v[nx][ny], 2, n);
  126. swap(v[nx][ny], v[nx - 1][ny]);
  127. nx--;
  128. }
  129. else if (nx == 1) {
  130. e.emplace_back(v[nx][ny], 2, ny);
  131. swap(v[nx][ny], v[nx][ny - 1]);
  132. ny--;
  133. }
  134. else {
  135. e.emplace_back(v[nx][ny], 3, ny + 2);
  136. swap(v[nx][ny], v[nx][ny + 1]);
  137. ny++;
  138. }
  139. used[v[nx][ny]] = true;
  140. int kx = nx, ky = ny;
  141. bool f = false;
  142. while (!(nx == kx && ny == ky && f)) {
  143. f = true;
  144. if (v[nx][ny] != 0) {
  145. if (nx == 1) {
  146. if (v[0][ny] == v[nx][ny]) {
  147. e.emplace_back(v[nx][ny], nx, ny + 1);
  148. v[nx][ny] = 0;
  149. kol++;
  150. }
  151. }
  152. else {
  153. if (v[3][ny] == v[nx][ny]) {
  154. e.emplace_back(v[nx][ny], nx + 2, ny + 1);
  155. v[nx][ny] = 0;
  156. kol++;
  157. }
  158. }
  159. }
  160. if (nx == 2 && ny == 0) {
  161. nx--;
  162. }
  163. else if (nx == 1 && ny == n - 1) {
  164. nx++;
  165. }
  166. else if (nx == 1) {
  167. ny++;
  168. }
  169. else {
  170. ny--;
  171. }
  172. if (v[nx][ny] != 0 && used[v[nx][ny]]) break;
  173. if (v[nx][ny] != 0 && !(nx == kx && ny == ky)) {
  174. if (nx == 1 && ny == 0) {
  175. e.emplace_back(v[nx][ny], 3, 1);
  176. swap(v[nx][ny], v[nx + 1][ny]);
  177. nx++;
  178. }
  179. else if (nx == 2 && ny == n - 1) {
  180. e.emplace_back(v[nx][ny], 2, n);
  181. swap(v[nx][ny], v[nx - 1][ny]);
  182. nx--;
  183. }
  184. else if (nx == 1) {
  185. e.emplace_back(v[nx][ny], 2, ny);
  186. swap(v[nx][ny], v[nx][ny - 1]);
  187. ny--;
  188. }
  189. else {
  190. e.emplace_back(v[nx][ny], 3, ny + 2);
  191. swap(v[nx][ny], v[nx][ny + 1]);
  192. ny++;
  193. }
  194. }
  195. }
  196. }
  197. cout << e.size() << "\n";
  198. for (int i = 0; i < e.size(); i++) {
  199. cout << e[i].num << " " << e[i].r << " " << e[i].c << "\n";
  200. }
  201. return;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement