问题描述
这是一个互动的问题。记住,在与测试程序通信时刷新输出。您可以使用c++中的fflush(stdout)、Java中的system.out.flush()、Python中的stdout.flush()或Pascal中的flush(output)来刷新输出。如果使用其他编程语言,请参考它的文档。您也可以参考交互式问题指南:https://codeforces.com/blog/entry/45307。
陪审团选择了一个不小于0且不大于214 - 1的整数x。你必须猜这个整数。
要做到这一点,您可以询问不超过2个查询。每个查询应该包含100个整数a1, a2,…, a100(每个整数应不小于0且不大于214?1)。在回答你的问题时,评审团会选择一个整数i(1≤i≤100),并告诉你ai?x的值(ai和x的位XOR)。
它保证x的值在每次测试之前都是固定的,但是每个查询中i的选择可能取决于您发送的整数。
输出
要给出答案,程序应该打印一行!x的末尾有一个换行符。之后,它应该刷新输出并优雅地终止。
交互
在给出答案之前,您最多可以提交两个查询。若要查询,请按以下格式打印一行:?a1 a2……a100,其中每个aj应该是[0,214 - 1]范围内的整数。行应该以换行符结束。提交查询后,刷新输出并读取查询的答案——对于某些i∈[1,100],ai?x的值。查询中不能多次使用整数。
如果您提交了一个不正确的查询(或询问了两个以上的查询),它的答案将是一个整数- 1。在收到这样的答案后,您的程序应该立即终止——否则您可能会收到“运行时错误”、“超过时间限制”或其他一些结论,而不是“错误的答案”。
Example
input
0
32
output
? 3 5 6
? 32 24 37
! 5
Note
交互的例子不正确——您应该在每个查询中精确地输出100个整数。其他的都是正确的。
分析:
来自百度:
1.fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
2.fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上题目分析:
因为题目最多给你14位,0异或x=x,
- 我们可以先异或高7位为0的数,得到ans的高七位。
- 异或低7位为0的数,得到ans的低七位。
#include<bits/stdc++.h>
using namespace std;
typedef int Int;
#define int long long
#define INF 0x3f3f3f3f
#define maxn 200005
int a[maxn];
Int main()
{ios::sync_with_stdio(false);cin.tie(0);cout<<"? ";for(int i=1; i<=100; i++)cout<<i<<" "; //第一次保证高7位为0cout<<endl;int ans=0,temp;cin>>temp;for(int i=7; i<14; i++){ans+=((temp>>i&1)<<i);}cout<<"? ";for(int i=1; i<=100; i++)cout<<(i<<7)<<' ';//第二次保证低7为0cout<<endl;cin>>temp;for(int i=0; i<7; i++){ans+=((temp>>i&1)<<i);}cout<<"! "<<ans<<endl;return 0;
}