【题解】XOR Guessing
这是一道交互题。
一共有两次询问机会,第一次询问的100个数二进制后7位下全都为1,第二次询问的100个数二进制前7位都为1.
这样无论系统返回哪个的xor值,都可以推算出这范围内的数。
code:
#include<bits/stdc++.h>
using namespace std;
int aa,bb;
int a[107],tota;
int b[107],totb;
int x;
int main(){
for(register int i=1;i<=((1<<14)-1);i++){
if(((i&127)==127)&&tota<100){
a[++tota]=i;
}
if((((i>>7)&127)==127)&&totb<100){
b[++totb]=i;
}
}
printf("?");
for(int i=1;i<=100;i++){
printf(" %d",a[i]);
}
puts("");fflush(stdout);
cin>>aa;
for(int i=0;i<7;i++){
if(((aa>>i)&1)==0){
x+=(1<<i);
}
}
printf("?");
for(int i=1;i<=100;i++){
printf(" %d",b[i]);
}
puts("");fflush(stdout);
cin>>aa;
for(int i=7;i<14;i++){
if(((aa>>i)&1)==0){
x+=(1<<i);
}
}
cout<<"! "<<x<<endl;
return 0;
}