HoangMinhNguyen

https://codeforces.com/contest/1713/problem/D

Aug 6th, 2022 (edited)
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define fi first
  4. #define se second
  5. #define pb push_back
  6. #define vi vector<int>
  7. #define ii pair<int,int>
  8. #define iii pair<int, ii>
  9. #define iiii pair<ii, ii>
  10. #define Task "test"
  11. #define all(x) x.begin(),x.end()
  12.  
  13. using namespace std;
  14. const int N = 3e5+5;
  15. const int inf = 1e9+9;
  16. const int mod = 1e9+7;
  17. const int base = 33;
  18.  
  19. void readfile(){
  20.     if (fopen(Task".inp","r")){
  21.         //freopen(Task".inp","r",stdin);
  22.         //freopen(Task".out","w",stdout);
  23.     }
  24. }
  25.  
  26. int n, Pow[25];
  27.  
  28. void outp(int l, int r){
  29.     cout << "? " << l << ' ' << r << '\n';
  30.     cout.flush();
  31. }
  32.  
  33. int inp(){
  34.     int x;
  35.     cin >> x;
  36.     return x;
  37. }
  38.  
  39. void SOL(int x){
  40.     cout << "! " << x << '\n';
  41.     cout.flush();
  42. }
  43.  
  44. void solve(){
  45.     cin >> n;
  46.     vector<int> cur;
  47.     for(int i=1; i<=Pow[n]; i++) cur.pb(i);
  48.     while (cur.size()>=2){
  49.         if (cur.size()==2){
  50.             outp(cur[0],cur[1]);
  51.             int ret = inp();
  52.             if (ret==1) SOL(cur[0]);
  53.             else SOL(cur[1]);
  54.             return;
  55.         }
  56.         vector<int> New;
  57.         for(int j=0; j<cur.size(); j+=4){
  58.             outp(cur[j],cur[j+2]);
  59.             int answ = inp();
  60.             if (answ==0){
  61.                 outp(cur[j+1],cur[j+3]);
  62.                 int ret = inp();
  63.                 if (ret==1) New.pb(cur[j+1]);
  64.                 else New.pb(cur[j+3]);
  65.             }
  66.             else if (answ==1){
  67.                 outp(cur[j],cur[j+3]);
  68.                 int ret = inp();
  69.                 if (ret==1) New.pb(cur[j]);
  70.                 else New.pb(cur[j+3]);
  71.             }
  72.             else{
  73.                 outp(cur[j+1],cur[j+2]);
  74.                 int ret = inp();
  75.                 if (ret==1) New.pb(cur[j+1]);
  76.                 else New.pb(cur[j+2]);
  77.             }
  78.         }
  79.         cur = New;
  80.     }
  81.     SOL(cur[0]);
  82. }
  83.  
  84. void proc(){
  85.     int q;
  86.     cin >> q;
  87.     Pow[0] = 1;
  88.     for(int i=1; i<=18; i++){
  89.         Pow[i] = Pow[i-1]*2;
  90.     }
  91.     //q=1;
  92.     while (q--){
  93.         solve();
  94.     }
  95. }
  96.  
  97. signed main()
  98. {
  99.     readfile();
  100.     proc();
  101.     return 0;
  102. }
  103.  
Advertisement
Add Comment
Please, Sign In to add comment