1. 程式人生 > 其它 >XOR Guessing(CF 1207 E)

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;
}