danielvitor23

C. Carpark

Sep 11th, 2023
876
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define pb push_back
  5. #define all(x) x.begin(),x.end()
  6. #define rall(x) x.rbegin(),x.rend()
  7. using namespace std;
  8. using ii = pair<int, int>;
  9. using i64 = long long;
  10. const int INF = 0x3f3f3f3f;
  11. const i64 INFLL = 0x3f3f3f3f3f3f3f3f;
  12.  
  13. int main() {
  14.   cin.tie(0)->sync_with_stdio(0);
  15.  
  16.   int n, m; cin >> n >> m;
  17.   int a = n, b = m;
  18.  
  19.   int SZ = max(a, b);
  20.   if (n > m) swap(n, m);
  21.  
  22.   vector<vector<int>> ans(SZ, vector<int>(SZ, 0));
  23.  
  24.   int cur = 1;
  25.   int i = 0;
  26.   while (i + 5 - 1 < n) {
  27.     for (int j = 0; j < m; ++j) {
  28.       ans[i][j] = ans[i+1][j] = cur++;
  29.       ans[i+3][j] = ans[i+4][j] = cur++;
  30.     }
  31.  
  32.     i += 5;
  33.   }
  34.   int rem = n - i;
  35.   if (rem == 1) {
  36.     int j = 0;
  37.     while (j + 1 < m) {
  38.       ans[i][j] = ans[i][j+1] = cur++;
  39.       j += 2;
  40.     }
  41.   } else if (rem == 2) {
  42.     int j = 0;
  43.     while (j < m) {
  44.       ans[i][j] = ans[i+1][j] = cur++;
  45.       j += 1;
  46.     }
  47.   } else if (rem == 3) {
  48.     int j = 0;
  49.     while (j + 5 - 1 < m) {
  50.       ans[i+0][j+0] = ans[i+0][j+1] = cur++;
  51.       ans[i+0][j+3] = ans[i+0][j+4] = cur++;
  52.       ans[i+1][j+0] = ans[i+1][j+1] = cur++;
  53.       ans[i+1][j+3] = ans[i+1][j+4] = cur++;
  54.       ans[i+2][j+0] = ans[i+2][j+1] = cur++;
  55.       ans[i+2][j+3] = ans[i+2][j+4] = cur++;
  56.       j += 5;
  57.     }
  58.     int rr = m - j;
  59.     if (rr == 1) {
  60.       ans[i][j] = ans[i+1][j] = cur++;
  61.       ans[i+2][j-3] = ans[i+2][j-2] = cur++;
  62.       ans[i+2][j-1] = ans[i+2][j] = cur++;
  63.     } else if (rr == 2) {
  64.       ans[i][j] = ans[i][j+1] = cur++;
  65.       ans[i+1][j] = ans[i+1][j+1] = cur++;
  66.       ans[i+2][j] = ans[i+2][j+1] = cur++;
  67.     } else if (rr == 3) {
  68.       ans[i][j] = ans[i][j+1] = cur++;
  69.       ans[i][j+2] = ans[i+1][j+2] = cur++;
  70.       ans[i+1][j] = ans[i+2][j] = cur++;
  71.       ans[i+2][j+1] = ans[i+2][j+2] = cur++;
  72.     } else if (rr == 4) {
  73.       ans[i][j] = ans[i][j+1] = cur++;
  74.       ans[i][j+2] = ans[i+1][j+2] = cur++;
  75.       ans[i+1][j] = ans[i+2][j] = cur++;
  76.       ans[i+2][j+1] = ans[i+2][j+2] = cur++;
  77.       ans[i+1][j+3] = ans[i+2][j+3] = cur++;
  78.     }
  79.   } else if (rem == 4) {
  80.     int j = 0;
  81.     while (j + 5 - 1 < m) {
  82.       ans[i+0][j+0] = ans[i+0][j+1] = cur++;
  83.       ans[i+0][j+3] = ans[i+0][j+4] = cur++;
  84.       ans[i+1][j+0] = ans[i+1][j+1] = cur++;
  85.       ans[i+1][j+3] = ans[i+1][j+4] = cur++;
  86.       ans[i+2][j+0] = ans[i+2][j+1] = cur++;
  87.       ans[i+2][j+3] = ans[i+2][j+4] = cur++;
  88.       ans[i+3][j+0] = ans[i+3][j+1] = cur++;
  89.       ans[i+3][j+3] = ans[i+3][j+4] = cur++;
  90.       j += 5;
  91.     }
  92.     int rr = m - j;
  93.     if (rr == 1) {
  94.       for (int k = i; k < n; k += 2) {
  95.         ans[k][j] = ans[k+1][j] = cur++;
  96.       }
  97.     } else if (rr == 2) {
  98.       for (int k = i; k < n; k++) {
  99.         ans[k][j] = ans[k][j+1] = cur++;
  100.       }
  101.     } else if (rr == 3) {
  102.       ans[i][j+1] = ans[i+1][j+1] = cur++;
  103.       ans[i][j+2] = ans[i+1][j+2] = cur++;
  104.       ans[i+2][j+1] = ans[i+3][j+1] = cur++;
  105.       ans[i+2][j+2] = ans[i+3][j+2] = cur++;
  106.       ans[i+1][j] = ans[i+2][j] = cur++;
  107.     } else if (rr == 4) {
  108.       ans[i][j+1] = ans[i][j+2] = cur++;
  109.       ans[i+1][j] = ans[i+1][j+1] = cur++;
  110.       ans[i+1][j+2] = ans[i+1][j+3] = cur++;
  111.       ans[i+2][j] = ans[i+3][j] = cur++;
  112.       ans[i+2][j+1] = ans[i+3][j+1] = cur++;
  113.       ans[i+2][j+2] = ans[i+3][j+2] = cur++;
  114.       ans[i+2][j+3] = ans[i+3][j+3] = cur++;
  115.     }
  116.   }
  117.  
  118.   vector<vector<int>> aux(SZ, vector<int>(SZ, 0));
  119.  
  120.   if (a > b) {
  121.     for (int i = 0; i < n; ++i) {
  122.       for (int j = 0; j < m; ++j) {
  123.         int I = m - j - 1;
  124.         int J = i;
  125.         aux[I][J] = ans[i][j];
  126.       }
  127.     }
  128.     ans = aux;
  129.   }
  130.  
  131.   for (int i = 0; i < a; ++i) {
  132.     for (int j = 0; j < b; ++j) {
  133.       cout << ans[i][j] << ' ';
  134.     }
  135.     cout << '\n';
  136.   }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment