Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int,int> pii;
- #define DIM 107
- int a[DIM], b[4][DIM], c[DIM];
- int car,n,k;
- vector< pair<int, pair<int,int> > > ans;
- pair<int,int> getprev(int pi, int pj) {
- if(pi == 1) {
- if(pj > 1) return {pi,pj-1};
- else return {2,1};
- } else {
- if(pj < n) return {pi, pj+1};
- else return {1,n};
- }
- }
- int main() {
- //freopen("input.txt", "r", stdin);
- cin >> n >> k;
- int di,dj,pi,pj;
- for(int i = 1; i <= n; i++) cin >> a[i];
- for(int i = 1; i <= n; i++) {
- cin >> b[1][i];
- if(b[1][i] == 0) { di = 1; dj = i; }
- else car++;
- }
- for(int i = 1; i <= n; i++) {
- cin >> b[2][i];
- if(b[2][i] == 0) { di = 2; dj = i; }
- else car++;
- }
- for(int i = 1; i <= n; i++) cin >> c[i];
- for(int i = 1; i <= n; i++) { //розставимо на місця ті хто вже поруч
- if(b[1][i] != 0 && b[1][i] == a[i]) {
- car--;
- ans.push_back( {b[1][i], {1,i} } );
- b[1][i] = 0;
- di = 1; dj = i;
- }
- if(b[2][i] != 0 && b[2][i] == c[i]) {
- car--;
- ans.push_back( {b[2][i], {4,i} } );
- b[2][i] = 0;
- di = 2; dj = i;
- }
- }
- //di. dj - кооринати дирки
- while(1) {
- if(car == 2*n) break; //якщо дирок немає
- if(car == 0) break; //якщо вжде всі машини розставлені
- pi = di; pj = dj; //стартові координати дирки
- while(1) { //робимо повний оберт дирки по колу
- pair<int,int> p = getprev(pi,pj); //отримуємо координати попередньої клітинки в колі
- if(b[p.first][p.second] != 0) { //якщо там машина
- b[pi][pj] = b[p.first][p.second]; //пересуваєм її в дирку
- b[p.first][p.second] = 0; //і забираємо машину
- ans.push_back( {b[pi][pj], {pi+1,pj} } ); //пушим рух
- }
- //перевірим чи в ту клітинку яку щось поставили - чи у неї сусід парковка
- if(b[pi][pj] != 0 && pi == 1 && a[pj] == b[pi][pj]) {
- ans.push_back( {b[pi][pj], {1,pj} });
- b[pi][pj] = 0;
- car--;
- }
- //перевірим чи в ту клітинку яку щось поставили - чи у неї сусід парковка
- if(b[pi][pj] != 0 && pi == 2 && c[pj] == b[pi][pj]) {
- ans.push_back( {b[pi][pj], {4,pj} });
- b[pi][pj] = 0;
- car--;
- }
- //пересунемо нашу дирку на попередню клітинку
- pi = p.first;
- pj = p.second;
- if(pi == di && pj == dj) break; //якщо дирка зробила повне коло, брейкаємось
- }
- }
- if(ans.size() == 0) {
- cout<<-1<<endl;
- return 0;
- }
- cout<<ans.size()<<endl;
- for(auto p : ans) {
- cout<<p.first<<' '<<p.second.first<<' '<<p.second.second<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement