Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int poz[101];
- bool oc[101];
- int afis[101];
- vector <int> querr;
- void divide_for_one(int st,int dr)
- {
- if(st==dr)
- {
- poz[1]=st;
- return;
- }
- int mid=(st+dr)/2;
- cout<<"? "<<querr.size()+(mid-st+1)<<" ";
- for(auto it:querr)
- cout<<it<<" ";
- for(int i=st; i<=mid; i++)
- cout<<i<<" ";
- cout<<endl;
- int x;
- cin>>x;
- if(x==1)
- {
- for(int i=mid+1; i<=dr; i++)
- querr.push_back(i);
- divide_for_one(st,mid);
- }
- else
- {
- for(int i=st; i<=mid; i++)
- querr.push_back(i);
- divide_for_one(mid+1,dr);
- }
- }
- int main()
- {
- int n,i,a,x;
- cin>>n;
- divide_for_one(1,n);
- for(int l=2; l<=n; l++)
- {
- for(i=1; i<=n; i++)
- oc[i]=0;
- for(i=1; i<=n; i++)
- oc[poz[i]]=1;
- for(i=1; i<=n; i++)
- if(oc[i]==0)
- {
- cout<<"? 1 "<<i<<endl;
- cin>>a;
- ///poz posibila a lui 1 e poz[1]-1 sau poz[1]+1
- int var1=poz[1]-1,var2=poz[1]+1;
- if(var1==0)
- var1=n;
- if(var1==i)
- var1--;
- if(var1==0)
- var1=n;
- if(var2==n+1)
- var2=1;
- if(var2==i)
- var2++;
- if(var2==n+1)
- var2=1;
- cout<<"? "<<n-1<<" ";
- for(int j=1; j<=n; j++)
- if(j!=var1)
- cout<<j<<" ";
- cout<<endl;
- cin>>x;
- if(x!=1)///e pe var1, => shiftare la stanga
- {
- for(int j=1; j<=n; j++)
- if(poz[j])
- {
- poz[j]--;
- if(poz[j]==0)
- poz[j]=n;
- if(poz[j]==i)
- poz[j]--;
- if(poz[j]==0)
- poz[j]=n;
- }
- }
- else///e pe var2, => shiftare la dreapta
- {
- for(int j=1; j<=n; j++)
- if(poz[j])
- {
- poz[j]++;
- if(poz[j]==n+1)
- poz[j]=1;
- if(poz[j]==i)
- poz[j]++;
- if(poz[j]==n+1)
- poz[j]=1;
- }
- }
- poz[a]=i;
- break;
- }
- }
- for(i=1; i<=n; i++)
- afis[poz[i]]=i;
- cout<<"! ";
- for(i=1; i<=n; i++)
- cout<<afis[i]<<" ";
- cout<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment