题目链接

\(Description\)

  有一个长为\(n\)的序列,其中有两个元素为\(y\),其余全为\(x\)。你可以进行\(19\)次询问,每次询问你给出一个下标集合,交互库会返回这些元素的异或和。给定\(n,x,y\),你需要求出两个\(y\)的下标。

  \(n\leq 1000,1\leq x,y\leq 10^9\)。

\(Solution\)

  对连续区间询问得到的结果只有那么几种,可以直接判断\(y\)的个数的奇偶性。但是区分不出来该区间有0个还是2个\(y\)。

  两个\(y\)的下标不同。我们可以借此对下标某一位是\(0/1\)计算其异或和,若不同,则两个\(y\)的下标在这一位上不同。最后我们能得到两个\(y\)下标的异或和。

  找一个\(y\)在某位不同且元素个数最少的位置,在较小的集合内(大小\(\leq\frac{n}{2}\))二分,这里面只有一个\(y\),就可以得到它的位置,异或之前的和就得到另一个。次数正好\(19\)。

  当然也可以不二分。任找该位不同的一位\(p\),然后枚举不等于\(p\)的每位,我们要判断是否有一个\(y\)(另一个可以直接通过之前在该位的询问得到)在该位上是\(1\)。只枚举\(p,i\)位为1的下标,可以保证只有一个\(y\)并判断出这个\(y\)是否在这位上是\(1\),因为询问可以确定其中是否有\(y\)。

#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=1005; int n,x,y;
bool vis[N]; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline bool Query()
{
int t=0, res;
for(int i=1; i<=n; ++i) if(vis[i]) ++t;
if(!t) return 0;
printf("? %d",t);
for(int i=1; i<=n; ++i) if(vis[i]) printf(" %d",i);
putchar('\n'); fflush(stdout);
return res=read(),(t&1&&!(res^y))||(!(t&1)&&res^y==x);//想错好多次。。
} int main()
{
n=read(), x=read(), y=read();
int sum=0, p=0;
for(int i=0; 1<<i<=n; ++i)
{
for(int j=1; j<=n; ++j) if(j>>i&1) vis[j]=1;
if(Query()) sum|=1<<i, p=i;
for(int j=1; j<=n; ++j) vis[j]=0;
}
int p1=0, p2=1<<p;
for(int i=0; 1<<i<=n; ++i)
if(i!=p)
{
for(int j=1; j<=n; ++j) if(j>>i&1 && j>>p&1) vis[j]=1;
p2|=Query()<<i;
for(int j=1; j<=n; ++j) vis[j]=0;
}
if((p1=p2^sum)>p2) std::swap(p1,p2);
printf("! %d %d\n",p1,p2); fflush(stdout); return 0;
}

Codeforces.835E.The penguin's game(交互 按位统计 二分)的更多相关文章

  1. Codeforces 835E. The penguin's game

    http://codeforces.com/problemset/problem/835/E 题意: 这是一道交互题 有n个数,其中有2个y,n-2个x 每次你可以询问若干个数的异或和,从而得出y的位 ...

  2. Codeforces.744B.Hongcow's Game(交互 按位统计)

    题目链接 \(Description\) 一个\(n\times n\)的非负整数矩阵\(A\),保证\(A_{i,i}=0\).现在你要对每个\(i\)求\(\min_{j\neq i}A_{i,j ...

  3. codeforces 679A Bear and Prime 100 交互

    第一次交互题,记录一下吧 #include <cstdio> #include <iostream> #include <ctime> #include <v ...

  4. Codeforces 897D. Ithea Plays With Chtholly (交互)

    题目链接:D. Ithea Plays With Chtholly 题意: 给你n张纸,在纸上写字(在 1 - c之间)可以写m次数 (,).(主要是交互,让你判断) 题解: 首先,看到m>=n ...

  5. Vladik and Favorite Game CodeForces - 811D (思维+BFS+模拟+交互题)

    D. Vladik and Favorite Game time limit per test 2 seconds memory limit per test 256 megabytes input ...

  6. Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)

    <题目链接> 题目大意: 有一个长度为n(n<1000)的01串,该串中至少有一个0和一个1,现在由你构造出一些01串,进行询问,然后系统会给出你构造的串与原串的   Hamming ...

  7. Codeforces.810D.Glad to see you!(交互 二分)

    题目链接 \(Description\) 有一个大小为\(k\)的集合\(S\),元素两两不同且在\([1,n]\)内.你可以询问不超过\(60\)次,每次询问你给出\(x,y\),交互库会返回\(\ ...

  8. Codeforces - 1117E - Crisp String - 进制 - 交互

    https://codeforces.com/problemset/problem/1117/E 就用abc表示数字来给每个数编码,编完直接问出移动的结果,反构造就行了,比C和D还简单. #inclu ...

  9. Codeforces 1368F - Lamps on a Circle (交互博弈)

    这题也太新颖了吧.. 交互博弈 以前一直以为交互只能出二分 题意:长度为n的环形灯 玩家有两种操作 结束游戏 或者选择k个灯点亮 每次这个k是玩家自己选的 玩家操作后让电脑操作 电脑选择一个最优的点x ...

随机推荐

  1. Hadoop基础-Map端链式编程之MapReduce统计TopN示例

    Hadoop基础-Map端链式编程之MapReduce统计TopN示例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 对“temp.txt”中的数据进行分析,统计出各 ...

  2. bzoj千题计划233:bzoj 1304: [CQOI2009]叶子的染色

    http://www.lydsy.com/JudgeOnline/problem.php?id=1304 结论1:根节点一定染色 如果根节点没有染色,选择其子节点的一个颜色,那么所有这个颜色的子节点都 ...

  3. Matrix67|自由职业者,数学爱好者

    Matrix67|自由职业者,数学爱好者 介绍一下你自己和所做的工作. 我叫顾森,网名 Matrix67,长住北京的重庆人,目前没有固定的职业.一会儿当当码农,一会儿做做编辑,一会儿教教数学,一会儿写 ...

  4. html5 canvas旋转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. HDU 4502 吉哥系列故事——临时工计划(一维动态规划)

    题意:吉哥的假期是1到n天,然后有m个工作可以让吉哥选择做,每个工作都有一个开始 t_s  和结束的时间   t_e ,都用天来表示,然后每个工作必须从第一天做到最后一天, 从头到尾做完之后就可以得到 ...

  6. MySQL-视图View

    视图:一个非真实存在的,囊括复杂查询在内的表,也可以理解成,视图就是一个查询之后的结果. 补充一个概念:临时表查询(子查询):就是在查询语句中再次嵌套一个查询,并将嵌套中的查询设定别名 SELECT ...

  7. IL反编译的实用工具Ildasm.exe

    初识Ildasm.exe——IL反编译的实用工具    https://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html   学 ...

  8. python2.7中MySQLdb的安装与使用详解

    Python2.7中MySQLdb的使用 import MySQLdb #1.建立连接 connect = MySQLdb.connect( '127.0.0.1', #数据库地址 'root', # ...

  9. ecshop 2.7.x 批量测试

    下面为测试是否存在漏洞的脚本: sub MAIN($url) { use HTTP::UserAgent; my $r = HTTP::Request.new(); $r.uri: $url~'/us ...

  10. 315道Python面试题答案

    目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...