CodeForces 1207 E.XOR Guessing (交互题、位运算)

223 篇文章 1 订阅
31 篇文章 0 订阅

问题描述
这是一个互动的问题。记住,在与测试程序通信时刷新输出。您可以使用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,

  1. 我们可以先异或高7位为0的数,得到ans的高七位。
  2. 异或低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位为0
    cout<<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为0
    cout<<endl;
    
    
    
    cin>>temp;
    for(int i=0; i<7; i++)
    {
        ans+=((temp>>i&1)<<i);
    }
    cout<<"! "<<ans<<endl;
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值