题意
告诉
的大小关系。
、
由自己给出,求
、
题解
从高位到低位判断,显然起码要
个,还得维护后面的大小关系。
如果选择
,
;
,
;
刚好在
和
的时候,可以直接确定,并且由于是相等的,大小关系不变。
在
和
的时候,不能直接确定,通过之前的大小关系确定之后,由于这一位的异或值相等,所以直接保存大小关系即是后面的大小关系。
#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define sf(x) scanf("%d",&x)
#define inf 1e18
using namespace std;
typedef long long ll;
const int maxn = 405000;
int n,A[maxn];
int query(int x,int y){
cout<<"? "<<x<<" "<<y<<endl;
cout.flush();
int val;cin>>val;
return val;
}
int main(){
int a=0,b=0,big=query(a,b);
for(int i=29;i>=0;i--){
int l=query(a^(1<<i),b),r=query(a,b^(1<<i));
if(l==r){
if(big==1)a^=(1<<i);
else if(big==-1)b^=(1<<i);
big=l;
}
else if(l==-1){
a^=(1<<i);
b^=(1<<i);
}
}
cout<<"!"<<" "<<a<<" "<<b<<endl;
}