Advertisement
Korotkodul

CF2 2

Aug 16th, 2022
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.90 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. void cs(set <int> s){
  51.     if (s.size() == 0) return;
  52.     for (int i: s) cout<<i<<' ';
  53.     cout<<"\n";
  54. }
  55.  
  56. bool sh = 1;
  57.  
  58.  
  59. int main()
  60. {
  61.     /*ios::sync_with_stdio(0);
  62.     cin.tie(0);
  63.     cout.tie(0);*/
  64.     int n,k,t=1;
  65.     if (!sh) cin>>t;
  66.     for (int go = 0; go < t; ++go){
  67.         cin>>n>>k;
  68.         set <int> a,b,c,d, all;
  69.         for (int i = 1; i <= n; ++i){
  70.             //all.insert(i);
  71.             if (i % 4 == 0){
  72.                 a.insert(i);
  73.             }
  74.             else if ( (i + k) % 4 == 0){
  75.                 b.insert(i);
  76.             }
  77.             else if ( (i + k) % 4 == 2){
  78.                 c.insert(i);
  79.             }
  80.             else if ( (i % 4) == 2){
  81.                 d.insert(i);
  82.             }
  83.             else{
  84.                 all.insert(i);
  85.             }
  86.         }
  87.  
  88.         int can = a.size();
  89.  
  90.  
  91.         can += b.size();
  92.  
  93.  
  94.         can += min(c.size(), d.size());
  95.  
  96.         bool ok=0;
  97.         if (can >= n / 2){
  98.             ok=1;
  99.         }
  100.         if (ok){
  101.             cout<<"YES\n";
  102.         }
  103.         else{
  104.             cout<<"NO\n";
  105.             continue;
  106.         }
  107.         bool did=0;
  108.         if (c.size() > d.size()){
  109.             swap(c,d);
  110.             did = 1;
  111.         }
  112.         if (sh){
  113.             cout<<"c.size() d.size() = "<<c.size()<<' '<<d.size()<<"\n";
  114.         }
  115.         while (d.size() != c.size()){
  116.             int x = *d.begin();
  117.             d.erase(x);
  118.             if ((x+k) % 4 == x % 4){
  119.                 c.insert(x);
  120.             }
  121.             else all.insert(x);
  122.         }
  123.         if (did){
  124.             swap(c,d);
  125.         }
  126.         vector <pii> ans;
  127.         for (int i: c){
  128.             ans.push_back({i,-1});
  129.         }
  130.  
  131.         int id=-1;
  132.         for (int i: d){
  133.             id++;
  134.             ans[id].second = i;
  135.         }
  136.         if (sh){
  137.             cout<<"A\n";
  138.             cvp(ans);
  139.         }
  140.  
  141.         while (all.size() < n/2){
  142.             int x = *a.begin();
  143.             a.erase(x);
  144.             all.insert(x);
  145.             if (all.size() < n/2){
  146.                 x = *b.begin();
  147.                 b.erase(x);
  148.                 all.insert(x);
  149.             }
  150.         }
  151.  
  152.         for (int i: a){
  153.             ans.push_back({-1, i});
  154.         }
  155.         for (int i: b){
  156.             ans.push_back({i, -1});
  157.         }
  158.         if (sh){
  159.             cout<<"B\n";
  160.             cvp(ans);
  161.         }
  162.  
  163.         for (int i: all){
  164.             id++;
  165.             if (id == ans.size()){
  166.                 cout<<"OUT\n";
  167.                 break;
  168.             }
  169.             if (ans[id].first == -1){
  170.                 ans[id].first = i;
  171.             }
  172.             else{
  173.                 ans[id].second = i;
  174.             }
  175.         }
  176.  
  177.  
  178.         if (sh){
  179.             cout<<"ans.size() = "<<ans.size()<<"\n";
  180.             /*cout<<"a\n";
  181.             cs(a);
  182.             cout<<"b\n";
  183.             cs(b);
  184.             cout<<"c\n";
  185.             cs(c);
  186.             cout<<"d\n";
  187.             cs(d);
  188.             cout<<"all\n";
  189.             cs(all);*/
  190.         }
  191.         cvp(ans);
  192.     }
  193. }
  194. /*
  195. 4
  196. 4 1
  197. 2 0
  198. 12 10
  199. 14 11
  200.  
  201. 14 11
  202. */
  203.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement