正题

题目链接:https://codeforces.com/contest/1556/problem/D


题目大意

现在有\(n\)个你不知道的数字,你有两种询问操作

  1. 询问两个下标的数字的\(and\)
  2. 询问两个下标的数字的\(or\)

要求在\(2n\)次操作以内求出第\(k\)小的数字

\(1\leq n\leq 10^4,0\leq a_i\leq 10^9\)


解题思路

显示我们取\(and\)之后为\(0\)且\(or\)之后为\(1\)的位就可以得到两个数字的异或,所以我们可以通过\(2n-2\)次询问得到所有数字之间的异或值,那么此时我们就只需要知道一个数字就可以得到其他所有的。

然后考虑怎么求某一个数字,我们前面的步骤中拿\(1\)去\(or\)和\(and\)其他所有的值,不难发现每次我们除了知道异或值还能确定这两个数字异或之后为\(0\)的位上的具体值。

那么我们不知道位的肯定是\(1\)和其他所有数字都不同的,也就是这些位上除了\(1\)其他数字都相同,那么我们直接拿另外两个数\(and/or\)一下再取这些位上的值就好了。

这样询问次数就是\(2n-1\)次,可以通过本题。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e4+10;
int n,k,a[N],p[N];
int main()
{
scanf("%d%d",&n,&k);
int MS=(1<<30)-1,ans=0,bns=0;
for(int i=2,x,y;i<=n;i++){
printf("and 1 %d\n",i);
fflush(stdout);
scanf("%d",&x);
printf("or 1 %d\n",i);
fflush(stdout);
scanf("%d",&y);y^=MS;
p[i]=(MS^(x|y));
ans|=x;bns|=y;
}
int c=MS^(ans|bns),cns;
printf("and 2 3\n");
fflush(stdout);
scanf("%d",&cns);cns&=c;
a[1]=(c^cns)|ans;
for(int i=2;i<=n;i++)a[i]=a[1]^p[i];
sort(a+1,a+1+n);
printf("finish %d\n",a[k]);
fflush(stdout);
return 0;
}

CF1556D-Take a Guess【交互】的更多相关文章

  1. Sublime Text3配置在可交互环境下运行python快捷键

    安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...

  2. JS与APP原生控件交互

    "热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...

  3. Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...

  4. Android混合开发之WebView与Javascript交互

    前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...

  5. EventBus实现activity跟fragment交互数据

    最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...

  6. QT5利用chromium内核与HTML页面交互

    在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...

  7. PHP-----文件系统的交互

    本文讲解php中于文件交互中所使用的函数 代码示例 <html> <head> <title> File Detail </title> </he ...

  8. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  9. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  10. 工大助手(C#与python交互)

    工大助手(爬虫--C#与python交互) 基本内容 工大助手(桌面版) 实现登陆.查成绩.计算加权平均分等功能 团队人员 13070046 孙宇辰 13070003 张帆 13070004 崔巍 1 ...

随机推荐

  1. 盘点 HashMap 的实现原理及面试题

    1.请你谈谈 HashMap 的工作原理如果被问到 HashMap 相关的问题,它的工作原理都会被作为面试的开场白,这个时候先装作若有所思的样子冷静一下.首先 HashMap 是基于 hashing ...

  2. npm压缩js文件

    参考:https://blog.csdn.net/msy_msy/article/details/78261383 1.压缩单个js文件 cnpm install uglify-js -g 安装 1& ...

  3. C++ CLI简介(什么是C++ CLI)

    要知道C++/CLI是什么,首先知道什么是CLI. 一.CLI简介 CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环 ...

  4. git《一》

    org.eclipse.jgit.api.errors.TransportException: https://gitee.com/wbweb/springboot_vue.git: Authenti ...

  5. (原创)[C#] DataTable排序扩展方法

    一,前言 DataTable的应用极其广泛,对DataTable进行排序也有很多方式,每种的实现方式都不难,但是使用起来却比较繁琐,所以本人便写了一个扩展方法,专门对DataTable进行操作. 本篇 ...

  6. Python3-sqlalchemy-orm 创建关联表带外键并插入数据

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  7. 小程序使用 lodash 的问题

    import _ from 'lodash' 报错: vendor.js:11874 Uncaught TypeError: Cannot read property 'prototype' of u ...

  8. 剑指 Offer 33. 二叉搜索树的后序遍历序列

    剑指 Offer 33. 二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. ...

  9. IPSEC的实现方式

    IPSEC的实现方式 在IPSEC通信中涉及到一个重要方面,那就是如何定义要保护的数据流(又称为感兴趣流).这不仅涉及到IPSEC最终要保护哪部分数据,还关系到IPSEC的实现方式,因此有必要把感兴趣 ...

  10. MacOS开启PPTP协议

    ​ 开启PPTP协议: Mac OS X 系统默认开启了完整性保护(System Intregrity Protection,SIP),所以即使是root帐户也无法修改系统目录中的文件.如果需要修改受 ...