这个时候最多询问长度约为 26000,如何优化到规定范围内
#include <bits/stdc++.h>
using namespace std;
int t,n1,n2,arr[100005],l[100005],r[100005],to[100005];
int main() {
for (int i=1;i<=1000;i++) {
arr[i]=12100/i;
if (12100%i!=0) arr[i]++;
to[arr[i]]=i;
if (l[arr[i]]==0) l[arr[i]]=i;
r[arr[i]]=i;
//printf("%d ",arr[i]);
}
/*
for (int i=1;i<=120;i++) {
printf("%d %d %d\n",arr[i],l[arr[i]],r[arr[i]]);
}
for (int i=99;i>=1;i--) {
printf("%d %d %d\n",i,l[i],r[i]);
}
*/
scanf("%d",&t);
while (t--) {
printf("? 12100");
for (int i=1;i<=12100;i++) printf(" 100");
printf("\n");
fflush(stdout);
scanf("%d",&n1);
if (n1==0) {
printf("? 12100");
for (int i=1;i<=12100;i++) printf(" 1");
printf("\n");
fflush(stdout);
scanf("%d",&n2);
printf("! %d\n",to[n2]);
fflush(stdout);
}
else {
int k=100*l[n1],z=(l[n1-1]-l[n1])*100-1;
printf("? %d %d",2*z+1,k);
for (int i=1;i<=z;i++) printf(" %d %d",k,i);
printf("\n");
fflush(stdout);
scanf("%d",&n2);
printf("! %d\n",k-n2+2*z+1);
fflush(stdout);
}
}
}