1207E XOR Guessing
Note
- 什么是交互题
自己给出一段输出,判题机接受到这个输出,给你的输出返回一个结果,你再根据这个结果返回一个答案,判题机会检验答案的正确性
题目给出两次询问,每次问100个数字,然后会返回一个这一百个数字中随机一个和答案异或的值,要求输出答案,并且要求这200个数字不重复。
Code
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
const ll maxn = 2e6 + 7;
int main() {
//总共范围最大是14位二进制
cout << "? ";
for (long long i = 1; i <= 100; ++i) {//1-100的二进制的前七位都是0
cout << i << ' ';
}
int res1;
cin >> res1;
cout << endl << "? ";
for (long long i = 1; i <= 100; ++i) {//128-12800的二进制的后七位都是0
cout << (i << 7) << ' ';
}
cout << endl;
int res2;
//这样在返回的结果中,前七位一定是答案的前七位,后七位一定是答案的后七位。
cin >> res2;
ll ans = 0;
ans |= (res1 & ((1 << 7) - 1) << 7);
ans |= (res2 & ((1 << 7) - 1));
cout << "! " << ans << endl;
return 0;
}