Description

这是一道交互题

有A+B个人,编号从0~A+B-1,其中有A个人是诚实的,B个人是居心叵测的。

你想知道每个人是诚实的还是居心叵测的。

询问可以用二元组(i,j)表示,代表问编号为i的人 编号为j的人是否诚实。

诚实的人总会说真话,你不知道居心叵测的人会如何回答。(你可以理解为,交互库是自动适应的)

你只知道A,B,需要在2N次询问内得到答案,或者判断居心叵测的人一定存在一种回答方法使得你无论怎么问都存在两种或以上可能性,输出Impossible。

A,B<=2000

Solution

首先考虑怎么样是无解的。

其实很简单,就是当B>=A时

只要B>=A,那么从中挑出A个人假扮成好人,互相证明对方是真的,然后一起指证真的那A个人是假的,那么这样永远也不可能问出来。

那么现在A>B,该怎么做呢?

如果我们确定了一个人是真的,那么只需要问他一遍所有人就好了。

可以发现,如果我们问x 第y号人是否诚实,得到的回答是否定的话,那么x,y中必有一人是居心叵测的,我们可以直接将这两个人排除,这样剩余的人中诚实的人数仍旧大于居心叵测的人数。

具体来说,我们可以维护一个栈,从前向后看每一个人,询问栈顶的人新扫到的这个人是否诚实,是则入栈,否则将栈顶和这个人一起排除。

剩下栈中的人每个人都承认在它上方的那个人是诚实的,由于栈中至少一人是诚实的,因此栈顶的人一定诚实。

问他一遍所有人即可。

Code

Atcoder的交互格式有毒...

endl可以自动刷新输出缓冲区

#include <bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define N 5005
using namespace std;
int st[N],ans[N];
bool query(int x,int y)
{
cout<<"? "<<x<<" "<<y<<endl;
char ch[5];
scanf("%s",ch+1);
return (ch[1]=='Y');
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a<=b) cout<<"Impossible"<<endl;
else
{
int top=0;
fo(i,0,a+b-1)
{
if(!top) st[++top]=i;
else
{
if(!query(st[top],i)) st[top--]=0;
else st[++top]=i;
}
}
fo(i,0,a+b-1) ans[i]=query(st[top],i);
cout<<"! ";
fo(i,0,a+b-1) cout<<ans[i];
cout<<endl;
}
return 0;
}

【杂题】[ARC070F] Honest Or Unkind【交互】的更多相关文章

  1. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...

  2. dp杂题(根据个人进度选更)

    ----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...

  3. wangkoala杂题总集(根据个人进度选更)

    CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...

  4. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  5. Atcoder&CodeForces杂题11.7

    Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...

  6. Codeforces 杂题集 2.0

      记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序   1326D2 - Prefix-Suffix Palindrome (Hard version) ...

  7. 【Java面试】-- 杂题

    杂题 2019-11-03  21:09:37  by冲冲 1.类加载器的双亲委派机制 类加载器:把类通过类加载器加载到JVM中,然后转换成class对象(通过类的全路径来找到这个类). 双亲委派机制 ...

  8. 贪心/构造/DP 杂题选做Ⅱ

    由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...

  9. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

随机推荐

  1. 【转贴】Windows常用命令实例

    Windows常用命令实例 https://www.cnblogs.com/linyfeng/p/6261629.html 熟练使用DOS常用命令有助于提高工作效率. 1.windows+R:打开运行 ...

  2. thinkphp5.1 关于加载静态资源路径问题

    和thinkphp5.0不一样,thinkphp5.1的 thinkphp5.0的 直接在config.php文件中加入代码: <?phpreturn [ 'view_replace_str' ...

  3. python PEP8常用规范(看完你会感谢我的!)

    完整的规范移步传送门 pep8规范 官方文档:[https://www.python.org/dev/peps/pep-0008/](https://www.python.org/dev/peps/p ...

  4. wex5 页面跳转

    页面交互: 3种方法: 1.使用Shell提供的方法 打开另一个页面不需要等待页面返回 功能树上打开 2. 用windowDialog组件 需要等待页面返回 3.内嵌页 windowContainer ...

  5. springboot的一些注解

    springboot注解以及一些晦涩难理解的点介绍 @Validated 用于注入数值校验的注解(JSR303数据校验) @PropertySource 用于加载指定的配置文件,例如@Property ...

  6. docker toolbox的redis 配置主从及哨兵模式保证高可用

    redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一   主从模式1 搜索redis镜像  docker search redis2 拉取镜像docker pul ...

  7. 第九篇 float浮动

    float浮动   首先老师要声明,浮动这一块,和边距.定位相比,它是比较难的,但是用它,页面排版会更好.   这节课就直接上代码,看着代码去学浮动. 我们先弄一个div,给它一个背景颜色: HTML ...

  8. react如何通过shouldComponentUpdate来减少重复渲染

    转自:https://segmentfault.com/a/1190000016494335 在react开发中,经常会遇到组件重复渲染的问题,父组件一个state的变化,就会导致以该组件的所有子组件 ...

  9. 织梦多个栏目arclist调用副栏目不显示的解决办法

    织梦arclist调用副栏目不显示,网上关于这个问题的解决办法有很多,其中一种是: 打开/include/taglib/arclist.lib.php,代码约位于295-296行(我目前用的DedeC ...

  10. Ubuntu Linux 查看、编辑、比较二进制文件

    查看二进制有以下几种方法: 方法一:hexdump apt-get install libdata-hexdumper-perl 安装好之后就可以直接hexdump your_binary_file ...