Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int,int> pii;
  7.  
  8. #define DIM 107
  9. int a[DIM], b[4][DIM], c[DIM];
  10. int car,n,k;
  11. vector< pair<int, pair<int,int> > > ans;
  12.  
  13. pair<int,int> getprev(int pi, int pj) {
  14. if(pi == 1) {
  15. if(pj > 1) return {pi,pj-1};
  16. else return {2,1};
  17. } else {
  18. if(pj < n) return {pi, pj+1};
  19. else return {1,n};
  20. }
  21. }
  22.  
  23. int main() {
  24. //freopen("input.txt", "r", stdin);
  25.  
  26. cin >> n >> k;
  27. int di,dj,pi,pj;
  28.  
  29. for(int i = 1; i <= n; i++) cin >> a[i];
  30.  
  31. for(int i = 1; i <= n; i++) {
  32. cin >> b[1][i];
  33. if(b[1][i] == 0) { di = 1; dj = i; }
  34. else car++;
  35. }
  36. for(int i = 1; i <= n; i++) {
  37. cin >> b[2][i];
  38. if(b[2][i] == 0) { di = 2; dj = i; }
  39. else car++;
  40. }
  41.  
  42.  
  43. for(int i = 1; i <= n; i++) cin >> c[i];
  44.  
  45.  
  46. for(int i = 1; i <= n; i++) { //розставимо на місця ті хто вже поруч
  47. if(b[1][i] != 0 && b[1][i] == a[i]) {
  48. car--;
  49. ans.push_back( {b[1][i], {1,i} } );
  50. b[1][i] = 0;
  51. di = 1; dj = i;
  52. }
  53. if(b[2][i] != 0 && b[2][i] == c[i]) {
  54. car--;
  55. ans.push_back( {b[2][i], {4,i} } );
  56. b[2][i] = 0;
  57. di = 2; dj = i;
  58. }
  59. }
  60.  
  61. //di. dj - кооринати дирки
  62.  
  63. while(1) {
  64. if(car == 2*n) break; //якщо дирок немає
  65. if(car == 0) break; //якщо вжде всі машини розставлені
  66. pi = di; pj = dj; //стартові координати дирки
  67. while(1) { //робимо повний оберт дирки по колу
  68.  
  69. pair<int,int> p = getprev(pi,pj); //отримуємо координати попередньої клітинки в колі
  70.  
  71. if(b[p.first][p.second] != 0) { //якщо там машина
  72. b[pi][pj] = b[p.first][p.second]; //пересуваєм її в дирку
  73. b[p.first][p.second] = 0; //і забираємо машину
  74. ans.push_back( {b[pi][pj], {pi+1,pj} } ); //пушим рух
  75. }
  76.  
  77. //перевірим чи в ту клітинку яку щось поставили - чи у неї сусід парковка
  78. if(b[pi][pj] != 0 && pi == 1 && a[pj] == b[pi][pj]) {
  79. ans.push_back( {b[pi][pj], {1,pj} });
  80. b[pi][pj] = 0;
  81. car--;
  82. }
  83.  
  84. //перевірим чи в ту клітинку яку щось поставили - чи у неї сусід парковка
  85. if(b[pi][pj] != 0 && pi == 2 && c[pj] == b[pi][pj]) {
  86. ans.push_back( {b[pi][pj], {4,pj} });
  87. b[pi][pj] = 0;
  88. car--;
  89. }
  90.  
  91. //пересунемо нашу дирку на попередню клітинку
  92. pi = p.first;
  93. pj = p.second;
  94. if(pi == di && pj == dj) break; //якщо дирка зробила повне коло, брейкаємось
  95. }
  96. }
  97.  
  98. if(ans.size() == 0) {
  99. cout<<-1<<endl;
  100. return 0;
  101. }
  102.  
  103. cout<<ans.size()<<endl;
  104. for(auto p : ans) {
  105. cout<<p.first<<' '<<p.second.first<<' '<<p.second.second<<endl;
  106. }
  107.  
  108.  
  109.  
  110.  
  111.  
  112. return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement