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. 厉害了,ES 如何做到几十亿数据检索 3 秒返回!

    一.前言 数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完善的文档,在此分享以供所需朋友的 实现参考,少走些弯路,在此篇幅中偏重于ES的优化,关于HBase,Hadoop ...

  2. [LGP4859,...] 一类奇怪的容斥套DP

    漫山遍野都是fake的光影. 题目 [LGP4859] 已经没有什么好害怕的了 给定两个长度为n的数组a和b,将a中元素与b中元素配对,求满足ai>bj的配对(i,j)个数减去满足ai<b ...

  3. Codeforces 1194D. 1-2-K Game

    传送门 先考虑只能走 $1,2$ 步的情况,设 $p[i]$ 表示当 $n=i$ 时先手是否必胜 自己手玩一下发现 $p$ 就是 $011011011...011$ 这样循环(下标从 $0$ 开始,其 ...

  4. 2018最新版 手机号、验证码正则表达式 jq + 小程序

    HTML: <!-- 表单 --> <input class="weui-input" id="tel" type="tel&quo ...

  5. 一文搞懂网络知识,IP、子网掩码、网关、DNS、端口号

    网络的基本概念 客户端:应用 C/S(客户端/服务器) B/S(浏览器/服务器) 服务器:为客户端提供服务.数据.资源的机器 请求:客户端向服务器索取数据 响应:服务器对客户端请求作出反应,一般是返回 ...

  6. Android系统修改之展讯平台的Mms不能发送西班牙特殊字符ú的问题

    在测试中, 发现在发送短信的时候特殊字符ú不能发送, 但是输入框可以输入并正常显示, 查看代码之后, 发现是展讯在字符转换的时候出现的问题 frameworks/base/telephony/java ...

  7. Mac 常用软件

    command+space开启新的一天 窗口管理:Magnet 写代码:Pycharm.vscode.sublime text 虚拟机:VMware Fusion(买不起Parallels Deskt ...

  8. SSD源码解读——损失函数的构建

    之前,对SSD的论文进行了解读,可以回顾之前的博客:https://www.cnblogs.com/dengshunge/p/11665929.html. 为了加深对SSD的理解,因此对SSD的源码进 ...

  9. 如何使用sqlalchemy根据数据库里面的表反推出模型,然后进行查询

    关于sqlalchemy映射数据库里面的表,一般情况下我们是需要定义一个模型来映射数据库里面的表的.但是很多时候数据库里面的表都是定义好的,而且字段很多,那么有没有不定义模型,还能使用orm语法查找数 ...

  10. Share:《THE ULTIMATE XSS PROTECTION CHEATSHEET FOR DEVELOPERS》

    Ajin Abraham(OWASP Xenotix XSS Exploit Framework的作者哦!)编写的<THE ULTIMATE XSS PROTECTION CHEATSHEET ...