Anon2005

Perrynator

Jun 5th, 2021
828
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int poz[101];
  4. bool oc[101];
  5. int afis[101];
  6. vector <int> querr;
  7. void divide_for_one(int st,int dr)
  8. {
  9.     if(st==dr)
  10.     {
  11.         poz[1]=st;
  12.         return;
  13.     }
  14.     int mid=(st+dr)/2;
  15.     cout<<"? "<<querr.size()+(mid-st+1)<<" ";
  16.     for(auto it:querr)
  17.         cout<<it<<" ";
  18.     for(int i=st; i<=mid; i++)
  19.         cout<<i<<" ";
  20.     cout<<endl;
  21.     int x;
  22.     cin>>x;
  23.     if(x==1)
  24.     {
  25.         for(int i=mid+1; i<=dr; i++)
  26.             querr.push_back(i);
  27.         divide_for_one(st,mid);
  28.     }
  29.     else
  30.     {
  31.         for(int i=st; i<=mid; i++)
  32.             querr.push_back(i);
  33.         divide_for_one(mid+1,dr);
  34.     }
  35. }
  36. int main()
  37. {
  38.     int n,i,a,x;
  39.     cin>>n;
  40.     divide_for_one(1,n);
  41.     for(int l=2; l<=n; l++)
  42.     {
  43.         for(i=1; i<=n; i++)
  44.             oc[i]=0;
  45.         for(i=1; i<=n; i++)
  46.             oc[poz[i]]=1;
  47.         for(i=1; i<=n; i++)
  48.             if(oc[i]==0)
  49.             {
  50.                 cout<<"? 1 "<<i<<endl;
  51.                 cin>>a;
  52.                 ///poz posibila a lui 1 e poz[1]-1 sau poz[1]+1
  53.                 int var1=poz[1]-1,var2=poz[1]+1;
  54.                 if(var1==0)
  55.                     var1=n;
  56.                 if(var1==i)
  57.                     var1--;
  58.                 if(var1==0)
  59.                     var1=n;
  60.                 if(var2==n+1)
  61.                     var2=1;
  62.                 if(var2==i)
  63.                     var2++;
  64.                 if(var2==n+1)
  65.                     var2=1;
  66.                 cout<<"? "<<n-1<<" ";
  67.                 for(int j=1; j<=n; j++)
  68.                     if(j!=var1)
  69.                         cout<<j<<" ";
  70.                 cout<<endl;
  71.                 cin>>x;
  72.                 if(x!=1)///e pe var1, => shiftare la stanga
  73.                 {
  74.                     for(int j=1; j<=n; j++)
  75.                         if(poz[j])
  76.                         {
  77.                             poz[j]--;
  78.                             if(poz[j]==0)
  79.                                 poz[j]=n;
  80.                             if(poz[j]==i)
  81.                                 poz[j]--;
  82.                             if(poz[j]==0)
  83.                                 poz[j]=n;
  84.                         }
  85.                 }
  86.                 else///e pe var2, => shiftare la dreapta
  87.                 {
  88.                     for(int j=1; j<=n; j++)
  89.                         if(poz[j])
  90.                         {
  91.                             poz[j]++;
  92.                             if(poz[j]==n+1)
  93.                                 poz[j]=1;
  94.                             if(poz[j]==i)
  95.                                 poz[j]++;
  96.                             if(poz[j]==n+1)
  97.                                 poz[j]=1;
  98.                         }
  99.                 }
  100.                 poz[a]=i;
  101.                 break;
  102.             }
  103.     }
  104.     for(i=1; i<=n; i++)
  105.         afis[poz[i]]=i;
  106.     cout<<"! ";
  107.     for(i=1; i<=n; i++)
  108.         cout<<afis[i]<<" ";
  109.     cout<<endl;
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment