题目来源:http://codeforces.com/contest/1270/problem/D
交互题目记录一下,完全没有什么感觉.....,输入输出颠倒一下。
题意:每次给了k个不同的位置,找到第m大的数,让你输入这个数的下标以及数值,找到这个m是多少就行。
分析几个实列,排序好后发现第m+1大的数出现m次,第m大的出现k-m次,发现直接找最大的记录数即可。样例也有明显的暗示。得按i,j特殊的排序检验方式。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
map<int,int>hh;
int n,k,i,j;
cin>>n>>k;
for(i=1;i<=k+1;i++)
{
printf("? ");
for(j=1;j<=k+1;j++)
{
if(i==j)
continue;
else{
printf("%d ",j);
}
} printf("\n");
int x1,x2;
cin>>x1>>x2;
hh[x2]++;
cout.flush();
}
printf("! %d",hh.rbegin()->second);
return 0;
}