XOR Guessing(CF 1207 E)

CodeForces - 1207E

题目大意

这是一道交互题。有一个未知数\(x\),你只能询问两次,每次询问\(100\)个数\(a_1,a_2,\dots,a_{100}\),且这\(200\)个数不能重复,每次询问,会返回\(x\)异或上询问的\(100\)个数中其中一个的结果,最后让你输出这个数\(x\)是多少。\((0\le x\le 2^{14}-1)\)

思路

这题感觉思路还是挺妙的,我们把这个数分成前\(7\)位和后\(7\)位来看,这样只要保证第一次询问的所有数的前\(7\)位都为\(0\),则就能知道这个数的前\(7\)位了,后\(7\)位亦然,于是这道题就结束了。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	cout<<"? ";
	for(long long i=1;i<=100;i++)cout<<i<<" ";
	cout<<endl;
	fflush(stdout);
	long long x1;cin>>x1;
	cout<<"? ";
	for(long long i=1;i<=100;i++)cout<<(i<<7)<<" ";
	cout<<endl;
	fflush(stdout);
	long long x2;cin>>x2;
	x1>>=7;x1<<=7;
	x2%=(1<<7);
	cout<<"! "<<x1+x2<<endl;
	return 0;
}
posted @ 2022-05-21 19:42  Jerry_Black  阅读(94)  评论(0)    收藏  举报