CF835E-The penguin‘s game【交互】
正题
题目链接:https://www.luogu.com.cn/problem/CF835E
题目大意
长度为\(n\)的序列中有两个\(y\)其他都是\(x\),给出\(n,x,y\)。你每次可以询问一个下标集合的数字异或和,要求在\(19\)次以内找到这两个\(y\)的位置。
\(1\leq n\leq 1000,1\leq x,y\leq 10^9,x\neq y\)
解题思路
考虑询问一个集合我们会得到的答案情况,如果集合大小为奇数则为\(y\)或者\(x\)依次表示\(y\)分别在一个集合内或者都在某个集合中,而偶数则是\(x\ xor\ y\)或者\(0\)。
现在变为了我们可以询问一个集合回答两个\(y\)都在一个集合内或外或者一个在内一个在外。
考虑到两个数字的下标肯定有一个二进制位不同,我们可以枚举这个位然后询问这个位是\(1\)的元素。这样我们总能找到一个集合使得一个\(y\)在内,一个\(y\)在外。
如果在这个两个集合里面暴力问的话算上前面的次数大概是\(3\log n\)的,考虑优化。
发现对于前面的询问,我们可以得到两个集合下标的异或值,所以如果我们问出一个位置再异或出另一个就好了。
因为是\(19\)次所以我们考虑找比较小的那个集合的值就好了。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1100;
int n,x,y,cnt,p[N],ansa,ansb;
void Ask(int l,int r){
if(l==r){ansa=p[l];return;}
int mid=(l+r)>>1,ans,flag=0;
printf("? %d",mid-l+1);
for(int i=l;i<=mid;i++)
printf(" %d",p[i]);
putchar('\n');fflush(stdout);
scanf("%d",&ans);
if((mid-l+1)&1)flag=(ans==y);
else flag=(ans==(x^y));
if(flag)Ask(l,mid);
else Ask(mid+1,r);
return;
}
void Find(int z){
cnt=0;
for(int i=1;i<=n;i++)
if((i/z)&1)p[++cnt]=i;
if(cnt>(n/2)){
cnt=0;
for(int i=1;i<=n;i++)
if(!((i/z)&1))p[++cnt]=i;
}
Ask(1,cnt);
}
int main()
{
scanf("%d%d%d",&n,&x,&y);
bool has=0;
for(int z=1;z<=n;z<<=1){
int L=0,ans,flag=0;putchar('?');
for(int i=1;i<=n;i++)if((i/z)&1)L++;
printf(" %d",L);
for(int i=1;i<=n;i++)if((i/z)&1)printf(" %d",i);
putchar('\n');fflush(stdout);
scanf("%d",&ans);
if(L&1)flag=(ans==y);
else flag=(ans==(x^y));
if(flag&&!has)Find(z),has=1;
ansb^=z*flag;
}
ansb^=ansa;
if(ansa>ansb)swap(ansa,ansb);
printf("! %d %d\n",ansa,ansb);
fflush(stdout);
return 0;
}
CF835E-The penguin‘s game【交互】的更多相关文章
- Codeforces.835E.The penguin's game(交互 按位统计 二分)
题目链接 \(Description\) 有一个长为\(n\)的序列,其中有两个元素为\(y\),其余全为\(x\).你可以进行\(19\)次询问,每次询问你给出一个下标集合,交互库会返回这些元素的异 ...
- Codeforces Round #427 (Div. 2) E. The penguin's game (交互题,二进制分组)
E. The penguin's game time limit per test: 1 second memory limit per test: 256 megabytes input: stan ...
- Sublime Text3配置在可交互环境下运行python快捷键
安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...
- JS与APP原生控件交互
"热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- EventBus实现activity跟fragment交互数据
最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...
- QT5利用chromium内核与HTML页面交互
在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...
- PHP-----文件系统的交互
本文讲解php中于文件交互中所使用的函数 代码示例 <html> <head> <title> File Detail </title> </he ...
随机推荐
- 小程序使用微信地址or小程序跳转设置页
如果你有使用过小程序需要你授权微信地址的情况,那么正常的逻辑应该是这样的: 点击获取地址后,弹窗: 此时我相信选择拒绝的人应该还是比较多的,毕竟这是敏感数据,拒绝后再看页面相关功能是否有使用地址的合适 ...
- 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
参考网址:图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) - 51CTO.COM 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath ...
- visual studio如何检查内存泄露?
Visual Studio有专门的插件叫做Visual Leak Detector (VLD)Visual Leak Detector for Visual C++ 2008/2010/2012/20 ...
- c++本地动态连接库代码
c++本地动态连接库代码 1 #pragma once 2 #include "stdafx.h" 3 4 #ifdef PERSON_EXPORTS 5 #define PERS ...
- 14.SpringMVC之文件上传下载
SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...
- 关于Ubuntu18.04 linux系统下使用Tim QQ 微信
先配上张图 步骤: 1.1 :需要安装环境deepin-wine 1.1:(你把他理解为jdk就好,没有jdk无法运行java程序,同理没有deepin-wine环境无法运行腾讯产品) 1.2 :去哪 ...
- 并发容器之ConcurrentHashMap
JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都 串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低 ...
- BeanUtils中的自动类型转换(二)
javabean package entity; import java.util.Date; /** * 一个测试用: * student,javaBean * @author mzy * 一个标准 ...
- 打印菱形图案(PTA)
打印菱形图案 本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 标题输入格式 输入在一行中给出一个正的奇数n. 输出格式 输出由n行星号"*"组 ...
- Python之smtplib模块
工作中难免会出现自动发送电子邮件的需求,比如说做完自动化测试之后通过电子邮件的形式将结果反馈出来.Python中提供了标准库smtplib来解决这一问题,该模块定义了一个smtp客户端会话对象,能够将 ...