Codeforces Round #730 (Div. 2) D1. RPD and Rap Sheet (Easy Version)

传送门

思路:

假设0到n-1之间的数为密码,则可以想到一个可行的解法:
第一次输出0,之后的每一次都输出 ( i − 1 ) ⊕ ( i − 2 ) (i-1)⊕(i-2) (i1)(i2)
假设答案为x,那么第一次输出0,答案变为0⊕x;
第二次输出0⊕1,那么答案就变为0⊕x⊕0⊕1,即x⊕1;
第三次变为x⊕2

以上利用异或的性质,可以在n次询问中获得答案。

#include<bits/stdc++.h>
#include<ctime>
using namespace std;
#define ll long long 
const int mod = 998244353;

int main()
{
    
    
	int t;
	cin>>t;
	while(t--)
	{
    
    
		int n,k;
		cin>>n>>k;
		for(int i = 0; i < n; i++)
		{
    
    
			if(i == 0)
			{
    
    
				cout<<i<<endl;
			}
			else
			{
    
    
				cout<<(i^(i-1))<<endl;
			}
			fflush(stdout) or cout.flush();
			int flag = 0;
			scanf("%d",&flag);
			if(flag)break;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/p15008340649/article/details/120242335