这是一道交互题。


一共有两次询问机会,第一次询问的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;
}