【题解】CF1207E XOR Guessing

Link

这是一道交互题。

\(\text{Solution:}\)

观察到猜的数范围只有\(2^{14}.\)

我第一次想到的方法是,我们可以确定系统选择的两个数的异或和,用这个异或和去穷举所有目标数,如果有符合条件的就输出。

但是,这样是无法唯一确定答案的。因为选择数是随机的,所以如果这样没梦想的去做,是无法唯一确定的。

换一种思路:因为它的二进制位只有\(14\)位,我们可以把它分成两个部分,一部分前七位都是\(0\),另一部分后七位位\(0\)。于是每一次询问,我们可以确定它的前七位和后七位。

答案就这样唯一确定了。

注意,\(endl\)自带\(fflush.\)所以代码里面没有写。

#include<bits/stdc++.h>
using namespace std;
int a[200],b[200],A,B;
int ans[200],res;
int main(){
	for(int i=1;i<=100;++i){
		a[i]=i;
		b[i]=i<<7;
	}
	cout<<"? ";
	for(int i=1;i<=100;++i)cout<<a[i]<<" ";
	cout<<endl;
	cin>>A;
	//for(int i=101;i<=200;++i)b[i-100]=i;
	cout<<"? ";
	for(int i=1;i<=100;++i)cout<<b[i]<<" ";
	cout<<endl;
	cin>>B;
	res|=((A&(((1<<7)-1))<<7));
	res|=(B&((1<<7)-1));
	cout<<"! "<<res<<endl;
	return 0;
} 

猜你喜欢

转载自www.cnblogs.com/h-lka/p/12899941.html
xor