Advertisement
eduardovp97

L.cpp

Sep 12th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1.     #include <bits/stdc++.h>
  2.     using namespace std;
  3.     #define mp make_pair
  4.     #define pb push_back
  5.     #define ff first
  6.     #define ss second
  7.     #define tm1 first
  8.     #define tm2 second.first
  9.     #define tm3 second.second
  10.     #define sz(x) ll(x.size())
  11.     #define fill(x,v) memset(x,v,sizeof(x))
  12.     #define all(v) (v).begin(),(v).end()
  13.     #define FER(i,a,b) for(ll i=ll(a); i < ll(b); ++i)
  14.     #define IFR(i,a,b) for(ll i=ll(a); i >=ll(b); --i)
  15.     #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  16.     #define sqr(x) (x)*(x)
  17.     #define bas 987625403
  18.     typedef long double ld;
  19.     typedef long long ll;
  20.     typedef pair<ll, ll> ii;
  21.     typedef pair<ll,ii> tri;
  22.     typedef vector<ll> vi;
  23.     typedef vector<ii> vii;
  24.     #define trace(...) fff(#__VA_ARGS__,__VA_ARGS__)
  25.      
  26.     template<typename t> void fff(const char *x, t&& val1){
  27.         cout << x << " : " << val1 << endl;
  28.     }
  29.      
  30.     template<typename t1, typename... t2> void fff(const char *x, t1&& val1, t2&&... val2){
  31.         const char *xd = strchr(x + 1, ',');
  32.         cout.write(x, xd-x) << " : " << val1 << " | ";
  33.         fff(xd + 1, val2...);
  34.     }
  35.      
  36.     #define N 1000000
  37.      
  38.     int n;
  39.     bitset<N+5> can;
  40.     int bp[N+5],id[N];
  41.     vector<int> nums;
  42.      
  43.     int l, r;
  44.      
  45.     void query(int x){
  46.         vector<int> vec(n,0);
  47.         while(x != 0){
  48.             int res = bp[x];
  49.             x -= res;
  50.             vec[id[res]]++;
  51.         }
  52.         cout << 1 << endl;
  53.         for(int x : vec) cout << x << " ";
  54.         cout << endl;
  55.         fflush(stdout);
  56.     }
  57.      
  58.     int main(){
  59.        
  60.         fastio;
  61.         cin >> n;
  62.         nums.resize(n);
  63.         FER(i,0,n){
  64.             cin >> nums[i];
  65.             id[nums[i]] = i;
  66.         }
  67.        
  68.         can.set(0);
  69.         for(int i = 0; i < n; ++i){
  70.             bitset<N+5> done;
  71.             int x = nums[i];
  72.             for(int j = N; j >= 0; --j){
  73.                 if(can[j]){
  74.                     for(int k = j+x; k <= N and !done[k]; k += x){
  75.                         done.set(k);
  76.                         can.set(k);
  77.                         bp[k] = x;
  78.                     }
  79.                 }
  80.             }
  81.         }
  82.         l = 1; r = 1e6;
  83.         vector<int> vec;
  84.         for(int i = 1; i <= N; ++i)
  85.             if(can[i]) vec.pb(i);
  86.      
  87.         string ans;
  88.         int lo = -1, hi = sz(vec);
  89.         while(hi - lo > 1){
  90.             int mid = (hi+lo)/2;
  91.             query(vec[mid]);
  92.             cin >> ans;
  93.             if(ans == "yellow"){
  94.                 cout << 2 << endl << vec[mid] << endl;
  95.                 fflush(stdout);
  96.                 exit(0);
  97.             }
  98.             if(ans == "red"){
  99.                 hi = mid;
  100.                 r = min(r, vec[mid] - 1);
  101.             }
  102.             else{
  103.                 lo = mid;
  104.                 l = max(l, vec[mid] + 1);
  105.             }
  106.         }
  107.         if(l == r) cout << 2 << endl << l << endl;
  108.         else cout << 2 << endl << -1 << endl;
  109.         fflush(stdout);
  110.      
  111.         return 0;
  112.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement