ohwhatalovelyday

Untitled

Mar 9th, 2021 (edited)
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define FASTER() ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  4. #define ff first
  5. #define ss second
  6. #define pb push_back
  7. #define all(a) a.begin(), a.end()
  8. #define dbg(x) cerr<<" "<<#x<<" "<<x<<endl
  9.  
  10. typedef long long ll;
  11.  
  12. using namespace std;
  13.  
  14. int n, m, r, q;
  15.  
  16. struct point {
  17.     int y, x;
  18. };
  19.  
  20. istream &operator >> (istream &in, point &p) {
  21.     in >> p.y >> p.x;
  22.     return in;
  23. }
  24.  
  25. int get(int y, int x) {
  26.     return (y - 1) * m + x;
  27. }
  28.  
  29. void print(vector <pair <point, point>> ans) {
  30. //    cout << ans.size() << "\n";
  31.     for(auto a : ans) {
  32.         cout << a.ff.y << " " << a.ff.x << " " << a.ss.y << " " << a.ss.x << endl;
  33.     }
  34. }
  35.  
  36. void fileIO() {
  37.     freopen("input.txt", "r", stdin);
  38.     freopen("output.txt", "w", stdout);
  39. }
  40.  
  41. void solve() {
  42.     cin >> n >> m >> r >> q;
  43.     vector <pair <point, point>> ways(q);
  44.     for(int i = 0; i < q; i++) {
  45.         cin >> ways[i].ff >> ways[i].ss;
  46.     }
  47.     vector <pair <point, point>> ans(r);
  48.     set <pair <int, int>> st;
  49.     int id = 0;
  50.     for(int k = 0; k < q; k++) {
  51.         int i = ways[k].ff.y, j = ways[k].ff.x;
  52.         int dif;
  53.         if(i < ways[k].ss.y) {
  54.             dif = 1;
  55.         } else {
  56.             dif = -1;
  57.         }
  58.         while(i != ways[k].ss.y) {
  59.             if(id >= r) break;
  60.             pair <int, int> temp1 = {get(i, j), get(i + 1, j)};
  61.             if(st.find(temp1) == st.end()) {
  62.                 ans[id] = {{i, j}, {i + 1, j}};
  63.                 st.insert(temp1);
  64.                 id++;
  65.             }
  66.             i += dif;
  67.         }
  68.         if(j < ways[k].ss.x) {
  69.             dif = 1;
  70.         } else {
  71.             dif = -1;
  72.         }
  73.         while(j != ways[k].ss.x) {
  74.             if(id >= r) break;
  75.             pair <int, int> temp1 = {get(i, j), get(i, j + 1)};
  76.             if(st.find(temp1) == st.end()) {
  77.                 ans[id] = {{i, j}, {i, j + 1}};
  78.                 st.insert(temp1);
  79.                 id++;
  80.             }
  81.             j += dif;
  82.         }
  83.     }
  84.     if(ans.size() < r) {
  85.         for(int i = 1; i <= n; i++) {
  86.             if(id >= r) break;
  87.             for(int j = 1; j < m; j++) {
  88.                 if(id == r) break;
  89.                 pair <int, int> temp1 = {get(i, j), get(i, j + 1)};
  90.                 if(st.find(temp1) == st.end()) {
  91.                     ans[id] = {{i, j}, {i, j + 1}};
  92.                     st.insert(temp1);
  93.                     id++;
  94.                 }
  95.             }
  96.         }
  97.     }
  98.     print(ans);
  99. }
  100.  
  101. int main() {
  102.     FASTER();
  103.     fileIO();
  104.     int t;
  105.     cin >> t;
  106.     while(t--) {
  107.         solve();
  108.     }
  109. }
  110.  
Add Comment
Please, Sign In to add comment