只询问前 个数,询问 次,第 次抛弃的是第 个元素,假设前 个元素排序后的数组为 则对于前 个元素, 和 都是 ,所以 一共出现 次, 一共出现 次。由此, 易得。
#include<bits/stdc++.h>
using namespace std;
int main(){
int times1=0,times2=0;
int n,k;
cin>>n>>k;
int pos1,pos2;
int num1,num2;
cout<<"?";
for(int i=2;i<=k+1;i++){
cout<<' '<<i;
}
cout<<endl;
cin>>pos1>>num1;
times1++;
fflush(stdout);
for(int i=2;i<=k+1;i++){
cout<<"?";
for(int j=1;j<=k+1;j++){
if(j!=i) cout<<" "<<j;
}
cout<<endl;
int tmp_pos,tmp_num;
cin>>tmp_pos>>tmp_num;
if(tmp_pos==pos1) times1++;
else {times2++;pos2=tmp_pos;num2=tmp_num;}
fflush(stdout);
}
if(num1>num2){
cout<<"! "<<times1<<'\n';
}else {
cout<<"! "<<times2<<'\n';
}
}