这是一道交互题。
一共有两次询问机会,第一次询问的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; }