XOR Guessing
第一次做这种交互题,刚开始还看不懂,现在已经差不多可以理解了,清空缓存区用
cout<<endl;
即可,需要注意的是,如果用fflush(stdout)
来清空缓存区,注意不能关同步
思路:最多可能是\(2^{14}-1\)总共14位数,最多可以询问两次,那么只需要分别求出其前7位和后7位即可,
1~100
与 x 取&,那么我们就可以得出x的前7位的值,因为1~100
最多只有7位,不会影响到前7位,那么后7位只需将 x 与(1~100)<<7
取&即可
代码:
// Created by CAD on 2019/8/23.
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout<<"?";
for(int i=1;i<=100;++i) cout<<" "<<i;
cout<<endl;
int x; cin>>x;
cout<<"?";
for(int i=0;i<100;++i) cout<<" "<<(i+1<<7);
cout<<endl;
int y; cin>>y;
cout<<"! ";
cout<<((y&0x7f)|(x&~0x7f))<<endl;
return 0;
}
python 版本:
print('?', *[(i+1) << 7 for i in range(100)], '\n', '?', *[(i+1) for i in range(100)])
print("!",((int(input()) & 0x7F)|(int(input()) & ~0x7f)))
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042