Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define mp make_pair
- #define pb push_back
- #define ff first
- #define ss second
- #define tm1 first
- #define tm2 second.first
- #define tm3 second.second
- #define sz(x) ll(x.size())
- #define fill(x,v) memset(x,v,sizeof(x))
- #define all(v) (v).begin(),(v).end()
- #define FER(i,a,b) for(ll i=ll(a); i < ll(b); ++i)
- #define IFR(i,a,b) for(ll i=ll(a); i >=ll(b); --i)
- #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
- #define sqr(x) (x)*(x)
- #define bas 987625403
- typedef long double ld;
- typedef long long ll;
- typedef pair<ll, ll> ii;
- typedef pair<ll,ii> tri;
- typedef vector<ll> vi;
- typedef vector<ii> vii;
- #define trace(...) fff(#__VA_ARGS__,__VA_ARGS__)
- template<typename t> void fff(const char *x, t&& val1){
- cout << x << " : " << val1 << endl;
- }
- template<typename t1, typename... t2> void fff(const char *x, t1&& val1, t2&&... val2){
- const char *xd = strchr(x + 1, ',');
- cout.write(x, xd-x) << " : " << val1 << " | ";
- fff(xd + 1, val2...);
- }
- #define N 1000000
- int n;
- bitset<N+5> can;
- int bp[N+5],id[N];
- vector<int> nums;
- int l, r;
- void query(int x){
- vector<int> vec(n,0);
- while(x != 0){
- int res = bp[x];
- x -= res;
- vec[id[res]]++;
- }
- cout << 1 << endl;
- for(int x : vec) cout << x << " ";
- cout << endl;
- fflush(stdout);
- }
- int main(){
- fastio;
- cin >> n;
- nums.resize(n);
- FER(i,0,n){
- cin >> nums[i];
- id[nums[i]] = i;
- }
- can.set(0);
- for(int i = 0; i < n; ++i){
- bitset<N+5> done;
- int x = nums[i];
- for(int j = N; j >= 0; --j){
- if(can[j]){
- for(int k = j+x; k <= N and !done[k]; k += x){
- done.set(k);
- can.set(k);
- bp[k] = x;
- }
- }
- }
- }
- l = 1; r = 1e6;
- vector<int> vec;
- for(int i = 1; i <= N; ++i)
- if(can[i]) vec.pb(i);
- string ans;
- int lo = -1, hi = sz(vec);
- while(hi - lo > 1){
- int mid = (hi+lo)/2;
- query(vec[mid]);
- cin >> ans;
- if(ans == "yellow"){
- cout << 2 << endl << vec[mid] << endl;
- fflush(stdout);
- exit(0);
- }
- if(ans == "red"){
- hi = mid;
- r = min(r, vec[mid] - 1);
- }
- else{
- lo = mid;
- l = max(l, vec[mid] + 1);
- }
- }
- if(l == r) cout << 2 << endl << l << endl;
- else cout << 2 << endl << -1 << endl;
- fflush(stdout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement