Advertisement
mohammedehab2002

Untitled

Jun 13th, 2020
2,159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  4. int z[11],p[(1<<11)+5];
  5. int query(int i,int j)
  6. {
  7.     printf("? %d %d\n",i,j);
  8.     fflush(stdout);
  9.     int ans;
  10.     scanf("%d",&ans);
  11.     assert(ans!=-1);
  12.     return ans;
  13. }
  14. int get(int i)
  15. {
  16.     int ans=(1<<11)-1;
  17.     for (int b=0;b<11;b++)
  18.     {
  19.         if (z[b]!=i)
  20.         ans&=query(i,z[b]);
  21.         else if (ans&(1<<b))
  22.         ans^=(1<<b);
  23.     }
  24.     return ans;
  25. }
  26. int main()
  27. {
  28.     int n;
  29.     scanf("%d",&n);
  30.     memset(z,-1,sizeof(z));
  31.     while (count(z,z+11,-1))
  32.     {
  33.         int i=uniform_int_distribution<int>(1,n)(rng),j=uniform_int_distribution<int>(1,n)(rng);
  34.         if (i==j)
  35.         continue;
  36.         int tmp=query(i,j);
  37.         for (int b=0;b<11;b++)
  38.         {
  39.             if (!(tmp&(1<<b)))
  40.             z[b]=i;
  41.         }
  42.     }
  43.     int idx=1,val=get(1);
  44.     for (int i=2;i<=n;i++)
  45.     {
  46.         if (query(idx,i)==val)
  47.         {
  48.             idx=i;
  49.             val=get(i);
  50.         }
  51.     }
  52.     for (int i=1;i<=n;i++)
  53.     {
  54.         if (i!=idx)
  55.         p[i]=query(i,idx);
  56.     }
  57.     printf("!");
  58.     for (int i=1;i<=n;i++)
  59.     printf(" %d",p[i]);
  60.     printf("\n");
  61.     fflush(stdout);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement