Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #pragma GCC optimize("03")
  4.  
  5. #define fi first
  6. #define se second
  7. #define pb push_back
  8. #define ll long long
  9. #define ull unsigned long long
  10. #define pow2(x) ((x) * (x))
  11. #define rev reverse
  12. #define in insert
  13. #define sz(x) (int)x.size()
  14.  
  15.  
  16. using namespace std;
  17.  
  18. typedef pair<int, int> pii;
  19. typedef pair<ll, ll> pll;
  20. typedef pair<ll, int> pli;
  21. typedef pair<int, ll> pil;
  22. typedef pair<int, pii> piii;
  23.  
  24. const ll inf = (ll)1e18;
  25. const int MAXN = (int)1e5;
  26. const ll mod = (ll)1e9 + 7;
  27.  
  28. const double pi = acos(-1.0);
  29.  
  30. const int motion = 4;
  31. const int dx[] = {0, 1, 0, -1};
  32. const int dy[] = {1, 0, -1, 0};
  33.  
  34. const int N = 100500;
  35.  
  36. struct cell {
  37. ll y, x, yn, xn;
  38.  
  39. cell() {
  40. y = x = yn = xn = 0;
  41. }
  42.  
  43. cell(ll y, ll x, ll yn, ll xn) {
  44. this->y = y;
  45. this->x = x;
  46. this->yn = yn;
  47. this->xn = xn;
  48. }
  49.  
  50. void out() {
  51. printf("y = %i, x = %i, yn = %i, xn = %i\n", y, x, yn, xn);
  52. }
  53. };
  54.  
  55. int main() {
  56. int n, q;
  57. scanf("%i%i", &n, &q);
  58.  
  59. vector<vector<int>> a(n, vector<int>(2));
  60.  
  61. for(int i = 0; i < n; i++) {
  62. scanf("%i%i", &a[ i ][ 0 ], &a[ i ][ 1 ]);
  63. }
  64.  
  65. map<pair<ll, ll>, cell> cells;
  66. for(int i = 0; i < n; i++) {
  67. for(int j = 0; j < motion; j++) {
  68. int ynew = i + dy[ j ], xnew = dx[ j ];
  69. if(xnew >= 0 && xnew < 2 && ynew >= 0 && ynew < n) {
  70. cells[ {a[ i ][ 0 ] + a[ ynew ][ xnew ], i * 0 + ynew * xnew} ] = cell{i, 0, ynew, xnew};
  71. }
  72. }
  73.  
  74. for(int j = 0; j < motion; j++) {
  75. int ynew = i + dy[ j ], xnew = 1 + dx[ j ];
  76. if(xnew >= 0 && xnew < 2 && ynew >= 0 && ynew < n) {
  77. cells[ {a[ i ][ 1 ] + a[ ynew ][ xnew ], i * 1 + ynew * xnew} ] = cell{i, 1, ynew, xnew};
  78. }
  79. }
  80. }
  81.  
  82. vector<vector<int>> ans(n, vector<int>(2));
  83. int col = 1;
  84.  
  85. //printf("??\n");
  86.  
  87. for(auto k = cells.end(); k != cells.begin(); k--) {
  88. if(k == cells.end()) continue;
  89. if(cells.find({k->fi.fi, k->fi.se}) == cells.end()) continue;
  90.  
  91. //printf("{%i: %i} - ", k->fi.fi, k->fi.se);
  92. //k->se.out();
  93.  
  94. /*
  95. for(auto k: cells) {
  96. printf("{%i, %i} -- ", k.fi.fi, k.fi.se);
  97. k.se.out();
  98. }
  99.  
  100. printf("\n=========================\n");*/
  101.  
  102.  
  103. ans[ k->se.y ][ k->se.x ] = col;
  104. /*for(int i = 0; i < n; i++) {
  105. printf("%i %i\n", ans[ i ][ 0 ], ans[ i ][ 1 ]);
  106. }*/
  107. ans[ k->se.yn ][ k->se.xn ] = col;
  108. /*
  109. printf("\n======\n");
  110. for(int i = 0; i < n; i++) {
  111. printf("%i %i\n", ans[ i ][ 0 ], ans[ i ][ 1 ]);
  112. }*/
  113.  
  114. ++col;
  115.  
  116. if(col > q) {
  117. break;
  118. }
  119.  
  120. for(int j = 0; j < motion; j++) {
  121. int ynew = k->se.yn + dy[ j ], xnew = k->se.xn + dx[ j ];
  122. if(xnew >= 0 && xnew < 2 && ynew >= 0 && ynew < n) {
  123. cells.erase({a[ k->se.yn ][ k->se.xn ] + a[ ynew ][ xnew ], k->se.yn * k->se.xn + ynew * xnew});
  124. }
  125. }
  126.  
  127. for(int j = 0; j < motion; j++) {
  128. int ynew = k->se.y + dy[ j ], xnew = k->se.x + dx[ j ];
  129. if(xnew >= 0 && xnew < 2 && ynew >= 0 && ynew < n) {
  130. cells.erase({a[ k->se.y ][ k->se.x ] + a[ ynew ][ xnew ], k->se.y * k->se.x + ynew * xnew});
  131. }
  132. }
  133.  
  134. cells.erase({k->fi.fi, k->fi.se});
  135.  
  136. /*
  137. for(int i = 0; i < n; i++) {
  138. printf("%i %i\n", ans[ i ][ 0 ], ans[ i ][ 1 ]);
  139. }*/
  140. }
  141.  
  142. for(int i = 0; i < n; i++) {
  143. printf("%i %i\n", ans[ i ][ 0 ], ans[ i ][ 1 ]);
  144. }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement