题解:CF1088D Ehab and another another xor problem
题目传送门
思路
简单交互题。
首先确定
由于题目要求
我们对于每个二进制位做两次询问来判断
代码
我通常不给代码。
#include<bits/stdc++.h>
using namespace std;
#define f fflush(stdout)
void ask(int x,int y){printf("? %d %d\n",x,y);f;}
void answer(int x,int y){printf("! %d %d\n",x,y);f;}
signed main(){
ask(0,0);
int op,ansa=0,ansb=0;scanf("%d",&op);
for(int i=29;i>=0;i--){
int k=(1<<i),x,y;
ask(ansa^k,ansb);scanf("%d",&x);
ask(ansa,ansb^k);scanf("%d",&y);
if(x==y){
if(op==1) ansa^=k;
else if(op==-1) ansb^=k;
op=x;
}
else if(x==-1) ansa^=k,ansb^=k;
}answer(ansa,ansb);
return 0;
}
撒花!