Advertisement
Korotkodul

CF 1

Aug 16th, 2022 (edited)
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a){
  44.     for (auto p: a){
  45.         cout<<p.first<<' '<<p.second<<"\n";
  46.     }
  47.     cout<<"\n";
  48. }
  49.  
  50. bool sh = 1;
  51.  
  52.  
  53. int main()
  54. {
  55.     /*ios::sync_with_stdio(0);
  56.     cin.tie(0);
  57.     cout.tie(0);*/
  58.     int n,k,t=1;
  59.     if (!sh) cin>>t;
  60.     for (int go = 0; go < t; ++go){
  61.         cin>>n>>k;
  62.         set <int> a,b,c,d, all;
  63.         for (int i = 1; i <= n; ++i){
  64.             //all.insert(i);
  65.             if (i % 4 == 0){
  66.                 a.insert(i);
  67.             }
  68.             else if ( (i + k) % 4 == 0){
  69.                 b.insert(i);
  70.             }
  71.             else if ( (i + k) % 4 == 2){
  72.                 c.insert(i);
  73.             }
  74.             else if ( (i % 4) == 2){
  75.                 d.insert(i);
  76.             }
  77.             else{
  78.                 all.insert(i);
  79.             }
  80.         }
  81.  
  82.         int can = a.size();
  83.  
  84.  
  85.         can += b.size();
  86.  
  87.  
  88.         can += min(c.size(), d.size());
  89.  
  90.         bool ok=0;
  91.         if (can >= n / 2){
  92.             ok=1;
  93.         }
  94.         if (ok){
  95.             cout<<"YES\n";
  96.         }
  97.         else{
  98.             cout<<"NO\n";
  99.             continue;
  100.         }
  101.         bool did=0;
  102.         if (c.size() > d.size()){
  103.             swap(c,d);
  104.             did = 1;
  105.         }
  106.         if (sh){
  107.             cout<<"c.size() d.size() = "<<c.size()<<' '<<d.size()<<"\n";
  108.         }
  109.         while (d.size() != c.size()){
  110.             int x = *d.begin();
  111.             d.erase(x);
  112.             if ((x+k) % 4 == x % 4){
  113.                 c.insert(x);
  114.             }
  115.             else all.insert(x);
  116.         }
  117.         if (did){
  118.             swap(c,d);
  119.         }
  120.         vector <pii> ans;
  121.         for (int i: c){
  122.             ans.push_back({i,-1});
  123.         }
  124.  
  125.         int id=-1;
  126.         for (int i: d){
  127.             id++;
  128.             ans[id].second = i;
  129.         }
  130.  
  131.         while (all.size() < n/2){
  132.             int x = *a.begin();
  133.             a.erase(x);
  134.             all.insert(x);
  135.             if (all.size() < n/2){
  136.                 x = *b.begin();
  137.                 b.erase(x);
  138.                 all.insert(x);
  139.             }
  140.         }
  141.  
  142.         for (int i: a){
  143.             ans.push_back({-1, i});
  144.         }
  145.         for (int i: b){
  146.             ans.push_back({i, -1});
  147.         }
  148.         for (int i: all){
  149.             id++;
  150.             if (ans[id].first == -1){
  151.                 ans[id].first = i;
  152.             }
  153.             else{
  154.                 ans[id].second = i;
  155.             }
  156.         }
  157.         if (sh){
  158.             cout<<"ans.size() = "<<ans.size()<<"\n";
  159.  
  160.         }
  161.         cvp(ans);
  162.     }
  163. }
  164. /*
  165. 4
  166. 4 1
  167. 2 0
  168. 12 10
  169. 14 11
  170.  
  171. 14 11
  172. */
  173.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement