题目链接

\(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. 阿里云ECS使用cloudfs4oss挂载OSS

    cloudfs4oss可以帮我们将OSS直接挂载到ECS上,就像一个目录一样方便访问.使用方法: 1.安装配置环境: yum install libcurl libcurl-devel openssl ...

  2. bzoj千题计划237:bzoj1492: [NOI2007]货币兑换Cash

    http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不 ...

  3. 阿里云Tengine和Openresty/1.11.2.3 数据对比

    HLS播放延迟测试:阿里云48s ,openresy 31s Cache-Control: max-age=300 NGINX下配置CACHE-CONTROL   Content-Length:637 ...

  4. 【CodeForces】925 C.Big Secret 异或

    [题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...

  5. 游程编码(Run Length Code)

    一.什么是游程编码 游程编码是一种比较简单的压缩算法,其基本思想是将重复且连续出现多次的字符使用(连续出现次数,某个字符)来描述. 比如一个字符串: AAAAABBBBCCC 使用游程编码可以将其描述 ...

  6. vue中,写在methods里的B方法去调A方法的数据,访问不到?

    今天在写项目的时候,发现了一个京城性忽略的问题,在vue的methods的方法里面定义了两个方法,如下: getTaskList() { api.growthDetails.taskList({ ap ...

  7. Visual Studio 配置 Avalon 自动补全

    以VS2013为例: 1.关闭 Visual Studio 2.打开 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packa ...

  8. ListView position

    在使用listview的时候,我们经常会在listview的监听事件中,例如OnItemClickListener(onItemClick)中,或listview的adapter中(getView.g ...

  9. Java Service Wrapper将java程序设置为服务

    有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...

  10. oracle 学习day01

    1.关系型数据库的设计范式    范式:是关系型数据库关系模型规范化的标准.范式是建立在函数依赖的基础上.    函数依赖:如果表中某一个字段Y的值是有另外一个字段或一组字段X的值来确定,就称作Y函数 ...