这是一道交互题。
( ext{Solution:})
观察到猜的数范围只有(2^{14}.)
我第一次想到的方法是,我们可以确定系统选择的两个数的异或和,用这个异或和去穷举所有目标数,如果有符合条件的就输出。
但是,这样是无法唯一确定答案的。因为选择数是随机的,所以如果这样没梦想的去做,是无法唯一确定的。
换一种思路:因为它的二进制位只有(14)位,我们可以把它分成两个部分,一部分前七位都是(0),另一部分后七位位(0)。于是每一次询问,我们可以确定它的前七位和后七位。
答案就这样唯一确定了。
注意,(endl)自带(fflush.)所以代码里面没有写。
#include<bits/stdc++.h>
using namespace std;
int a[200],b[200],A,B;
int ans[200],res;
int main(){
for(int i=1;i<=100;++i){
a[i]=i;
b[i]=i<<7;
}
cout<<"? ";
for(int i=1;i<=100;++i)cout<<a[i]<<" ";
cout<<endl;
cin>>A;
//for(int i=101;i<=200;++i)b[i-100]=i;
cout<<"? ";
for(int i=1;i<=100;++i)cout<<b[i]<<" ";
cout<<endl;
cin>>B;
res|=((A&(((1<<7)-1))<<7));
res|=(B&((1<<7)-1));
cout<<"! "<<res<<endl;
return 0;
}