Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <stdio.h>
- #include <set>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <bitset>
- #include <cmath>
- #include <deque>
- #include <map>
- #include <iomanip>
- #include <functional>
- #include <queue>
- #include <stdlib.h>
- using namespace std;
- const double eps = 1e-9;
- const long long mod = 1e9 + 7;
- #define pb push_back
- #define F first
- #define S second
- typedef long double ld;
- typedef long long ll;
- void solve();
- signed main() {
- srand('V' + 'a' + 'n' + 'k' + 'a' + 'T' + 'a' + 'g' + 'a' + 'n' + 'a' + 'i');
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- solve();
- return 0;
- }
- struct E {
- int num, r, c;
- E() {}
- E(int a, int b, int ca) : num(a), r(b), c(ca) {}
- };
- void solve() {
- int n, k;
- cin >> n >> k;
- vector<vector<int>> v(4, vector<int>(n, 0));
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < n; j++) {
- cin >> v[i][j];
- }
- }
- int kol = 0;
- vector<E> e;
- for (int i = 0; i < n; i++) {
- if (v[1][i] == v[0][i] && v[1][i] != 0) {
- e.emplace_back(v[1][i], 1, i + 1);
- v[1][i] = 0;
- kol++;
- }
- if (v[2][i] == v[3][i] && v[2][i] != 0) {
- e.emplace_back(v[2][i], 4, i + 1);
- v[2][i] = 0;
- kol++;
- }
- }
- if (k - kol == 2 * n) {
- cout << -1;
- return;
- }
- for (int i = 0; i < n; i++) {
- if (v[1][i] != 0) {
- int j = i;
- while (j != 0 && v[1][j - 1] == 0) {
- e.emplace_back(v[1][j], 2, j);
- swap(v[1][j], v[1][j - 1]);
- j--;
- }
- }
- }
- for (int i = n - 1; i >= 0; i--) {
- if (v[2][i] != 0) {
- int j = i;
- while (j != n - 1 && v[2][j + 1] == 0) {
- e.emplace_back(v[2][j], 3, j + 2);
- swap(v[2][j], v[2][j + 1]);
- j++;
- }
- }
- }
- int x, y;
- if (v[1][0] != 0 && v[2][0] == 0) x = 1, y = 0;
- else if (v[2][n - 1] != 0 && v[1][n - 1] == 0) x = 2, y = n - 1;
- int nx = x, ny = y;
- while (kol != k) {
- vector<bool> used(k + 1, false);
- if (v[1][0] != 0 && v[2][0] == 0) nx = 1, ny = 0;
- else if (v[2][n - 1] != 0 && v[1][n - 1] == 0) nx = 2, ny = n - 1;
- else {
- for (int i = 1; i < n; i++) {
- if (v[1][i] != 0 && v[1][i - 1] == 0) {
- nx = 1, ny = i;
- break;
- }
- }
- for (int i = n - 2; i >= 0; i--) {
- if (v[2][i] != 0 && v[2][i + 1] == 0) {
- nx = 2, ny = i;
- break;
- }
- }
- }
- if (nx == 1 && ny == 0) {
- e.emplace_back(v[nx][ny], 3, 1);
- swap(v[nx][ny], v[nx + 1][ny]);
- nx++;
- }
- else if (nx == 2 && ny == n - 1) {
- e.emplace_back(v[nx][ny], 2, n);
- swap(v[nx][ny], v[nx - 1][ny]);
- nx--;
- }
- else if (nx == 1) {
- e.emplace_back(v[nx][ny], 2, ny);
- swap(v[nx][ny], v[nx][ny - 1]);
- ny--;
- }
- else {
- e.emplace_back(v[nx][ny], 3, ny + 2);
- swap(v[nx][ny], v[nx][ny + 1]);
- ny++;
- }
- used[v[nx][ny]] = true;
- int kx = nx, ky = ny;
- bool f = false;
- while (!(nx == kx && ny == ky && f)) {
- f = true;
- if (v[nx][ny] != 0) {
- if (nx == 1) {
- if (v[0][ny] == v[nx][ny]) {
- e.emplace_back(v[nx][ny], nx, ny + 1);
- v[nx][ny] = 0;
- kol++;
- }
- }
- else {
- if (v[3][ny] == v[nx][ny]) {
- e.emplace_back(v[nx][ny], nx + 2, ny + 1);
- v[nx][ny] = 0;
- kol++;
- }
- }
- }
- if (nx == 2 && ny == 0) {
- nx--;
- }
- else if (nx == 1 && ny == n - 1) {
- nx++;
- }
- else if (nx == 1) {
- ny++;
- }
- else {
- ny--;
- }
- if (v[nx][ny] != 0 && used[v[nx][ny]]) break;
- if (v[nx][ny] != 0 && !(nx == kx && ny == ky)) {
- if (nx == 1 && ny == 0) {
- e.emplace_back(v[nx][ny], 3, 1);
- swap(v[nx][ny], v[nx + 1][ny]);
- nx++;
- }
- else if (nx == 2 && ny == n - 1) {
- e.emplace_back(v[nx][ny], 2, n);
- swap(v[nx][ny], v[nx - 1][ny]);
- nx--;
- }
- else if (nx == 1) {
- e.emplace_back(v[nx][ny], 2, ny);
- swap(v[nx][ny], v[nx][ny - 1]);
- ny--;
- }
- else {
- e.emplace_back(v[nx][ny], 3, ny + 2);
- swap(v[nx][ny], v[nx][ny + 1]);
- ny++;
- }
- }
- }
- }
- cout << e.size() << "\n";
- for (int i = 0; i < e.size(); i++) {
- cout << e[i].num << " " << e[i].r << " " << e[i].c << "\n";
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement