XOR Guessing

E. XOR Guessing

第一次做这种交互题,刚开始还看不懂,现在已经差不多可以理解了,清空缓存区用cout<<endl;即可,需要注意的是,如果用fflush(stdout)来清空缓存区,注意不能关同步

思路:最多可能是\(2^{14}-1\)总共14位数,最多可以询问两次,那么只需要分别求出其前7位和后7位即可,1~100与 x 取&,那么我们就可以得出x的前7位的值,因为1~100最多只有7位,不会影响到前7位,那么后7位只需将 x 与(1~100)<<7取&即可

代码:

// Created by CAD on 2019/8/23.
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout<<"?";
    for(int i=1;i<=100;++i) cout<<" "<<i;
    cout<<endl;
    int x; cin>>x;
    cout<<"?";
    for(int i=0;i<100;++i) cout<<" "<<(i+1<<7);
    cout<<endl;
    int y; cin>>y;
    cout<<"! ";
    cout<<((y&0x7f)|(x&~0x7f))<<endl;
    return 0;
}

python 版本:

print('?', *[(i+1) << 7 for i in range(100)], '\n', '?', *[(i+1) for i in range(100)])
print("!",((int(input()) & 0x7F)|(int(input()) & ~0x7f)))

转载于:https://www.cnblogs.com/CADCADCAD/p/11401188.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值