cf1088D Ehab and another another xor problem(思维)
交互题 题目讲的是,有两个数(a,b)让猜,每次询问只能问(c,d)如果a^c < b^d 返回-1,如果a^c > b^d 返回1 ,相等返回0 62次以内问出来。 这个肯定是要按位处理,从高到低,那么a,b的这一位的组合也就四种(0,0)(0,1)(1,0)(1,1),我们想要确认出来,从下表可以看出,可以询问c,d这一位分别为(0,1)或者(1,0)各一次,如果结果不一样就可以确定这一位,但是如果是一样但是是不确定的的话,那么也就是说,两个其中一个这一位一定是1,可是怎么判断谁是1呢,这就要从两个数字的大小来判断。 我们可以询问一下(0,0)确定了两个数字的大小关系,然后碰到了两者必须填一个1的情况,就给大的那个数填一个1,然后把两个都假设成1,更新一下两个后半截的大小关系。 #include<bits/stdc++.h> #define ll long long using namespace std; const ll MAXN = 1e5+5; ll r; int main() { ll a=0,b=0; ll c = 0,d = 0,qa=0,qb=0; ll k = 1; printf("? %lld %lld\n",a,b); fflush(stdout); scanf("%lld",&r); if(r == -1)k = 0; for(ll i=29;i>=0