正题

题目链接:https://www.luogu.com.cn/problem/CF835E


题目大意

长度为nnn的序列中有两个yyy其他都是xxx,给出n,x,yn,x,yn,x,y。你每次可以询问一个下标集合的数字异或和,要求在191919次以内找到这两个yyy的位置。
1≤n≤1000,1≤x,y≤109,x≠y1\leq n\leq 1000,1\leq x,y\leq 10^9,x\neq y1≤n≤1000,1≤x,y≤109,x​=y


解题思路

考虑询问一个集合我们会得到的答案情况,如果集合大小为奇数则为yyy或者xxx依次表示yyy分别在一个集合内或者都在某个集合中,而偶数则是xxoryx\ xor\ yx xor y或者000。

现在变为了我们可以询问一个集合回答两个yyy都在一个集合内或外或者一个在内一个在外。

考虑到两个数字的下标肯定有一个二进制位不同,我们可以枚举这个位然后询问这个位是111的元素。这样我们总能找到一个集合使得一个yyy在内,一个yyy在外。

如果在这个两个集合里面暴力问的话算上前面的次数大概是3log⁡n3\log n3logn的,考虑优化。

发现对于前面的询问,我们可以得到两个集合下标的异或值,所以如果我们问出一个位置再异或出另一个就好了。

因为是191919次所以我们考虑找比较小的那个集合的值就好了。


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【交互】相关推荐

  1. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  2. Plotly_绘图画图作图交互

    20210601 https://zhuanlan.zhihu.com/p/87163211 画地图 今天就带你深入体验易于使用.文档健全.功能强大的开源 Python 绘图库 Plotly,教你如何 ...

  3. matplotlib交互模式

    Matpotlib交互模式 在运行python程序时有时候需要生成以下的 动态图模式 来显示程序运行的结果 此时需要使用matplotlib的 交互模式 ,在Ipython中时默认使用交互模式的. 在 ...

  4. Cache 与Memory架构及数据交互

    Cache 与Memory架构及数据交互

  5. Android 与 JS 的交互 以及 JS与Android 的交互

    Android与JS交互以及JS与Android 的交互 是通过WebView互相调用方法 对于Android调用JS代码的方法有2种: 通过WebView的loadUrl() 通过WebView的e ...

  6. 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流

    19.1 引言 前一章我们介绍了TCP连接的建立与释放:三握四挥,以及状态转移图. TCP报文段分为:交互数据,以及成块数据(下一章介绍). 交互数据:例如telnet,ssh,这种类型的协议在大多数 ...

  7. 鸿蒙与微信小程序,鸿蒙远程交互应用 vs 微信小程序远程交互应用

    原标题:鸿蒙远程交互应用 vs 微信小程序远程交互应用 鸿蒙的远程交互组件应用相对复杂,访问网络时,首先要配置网络权限,华为官方文档有问题,在此引用我老师配置的模板,见附件. 过程: 导入鸿蒙的网络请 ...

  8. js怎样和硬件交互_Node.js与JavaScript

    有很多介绍nodejs的文章,也有很多教程,覆盖了服务器开发.桌面开发.移动端等等,但是鲜有文章明确的回答过一个问题:Node是什么? 这看起来是一个再简单过的问题了,真要答起来可不容易,不去深入研究 ...

  9. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

最新文章

  1. SQL SERVER特殊行转列案列一则
  2. python函数注释 参数 省略号_解决python 输出是省略号的问题
  3. Android-静态代理模式
  4. 窗口分析函数_13_生成相邻上一个元素
  5. [Amaze UI] 如何推进 mobile first 的前端 Web 方案
  6. Python爬虫利器四PhantomJS的用法
  7. 【转载】一些重要的java知识点:JVM内存模型和结构
  8. LFSR:线性反馈移位寄存器及其应用
  9. 【CodeVS3372】选学霸
  10. Unity3D游戏开发之反编译AssetBundle提取游戏资源
  11. 【论文01】人脸图像合成综述
  12. Seaborn 绘图中设置字体及大小
  13. win8删除计算机管理员权限,win8.1系统如何删除administrator账户
  14. H.264再学习 -- 详解 H.264 NALU语法结构
  15. C++——队列应用——显示二项式系数
  16. 面临“反对沉没成本”效应,海尔、格力、海信、美的等家电厂商的智能音箱还有必要做吗?
  17. cmd 更改计算机名
  18. 力扣(1053.115)补9.13
  19. 基于腾讯x5封源库,提高60%开发效率
  20. Java学习之什么是泛型的擦除

热门文章

  1. python静态变量和静态方法_python的静态成员变量、实例成员变量、静态方法、类方法、实例方法...
  2. linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明
  3. 独占设备的分配与回收_灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?...
  4. python oracle连接池_【Python + Oracle】Python Oracle连接池—改进版
  5. 后端学习 - SpringBoot
  6. 101. 对称二叉树023(BFS)
  7. C++中判断在字符串中是否存在空格 以及 如何输入带空格的字符串
  8. [蓝桥杯2017决赛]图书排列-next_permutation枚举
  9. 天梯赛模拟 链表去重 (25 分)
  10. 安徽计算机学业水平测试内容,【2017年整理】安徽省学业水平测试信息技术(必修)知识点.doc...