思路
看到交互题,不是二分,就算按位处理。
这里显然可以按位处理
gcd(x+a,x+b) == gcd(x+a,b-a)
可以对x的每一位进行判断,当判断第i位的时候,让低位全部变成0,然后第i位加1,
也就是如果第i位是0,那他就变成了1,如果是1,那他就变成了0,然后与1<<(i+1)判断一下gcd就可以了
如果gcd == 1<<(i+1) 那他就是产生了进位
代码
#include <bits/stdc++.h>
using namespace std;
int query(int a,int b) {
cout<<"? "<<a<<' '<<b<<endl;
int x;cin>>x;
return x;
}
int main() {
int TT;cin>>TT;
while(TT--) {
int ans=0;
for(int i=0;i<30;i++) {
int tmp=(1<<i)-ans;
int t=query(tmp,(1<<i+1)+tmp);
if(t==(1<<i+1))ans+=1<<i;
}
cout<<"! "<<ans<<endl;
}
return 0;
}
标签:gcd,--,TT,CF,int,按位,781
From: https://www.cnblogs.com/basicecho/p/16971587.html