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. Python学习【day01】- Python初识

    Python下载:https://www.python.org/downloads/ 下载后进行安装,安装后的Python我们称之为Python解析器 1.打印“Hello World” 安装后的Py ...

  2. List是有序的Set是无序的吗? List和Set对比

    import java.util.*; /* * List和Set对比 * */ public class ListVSSet { public static void main(String[] a ...

  3. Jmeter 连接远程测压__(负载测试)

    第一步: 双方关闭防火墙  打开jmeter server bat   路径如下  会出错  

  4. Django项目运行端口被占用

    error:以一种访问权限不允许的方式做了一个访问套接字的尝试,是8000端口被其他程序占用了,杀掉占用的程序就可以 (1)查找哪个进程占用了8000端口 `E:\sign_system\guest& ...

  5. linux端口控制(开放-禁止)

    禁止访问80端口iptables -I INPUT -p tcp --dport 80 -j DROP 允许ip为192.168.1.1的机器访问iptables -I INPUT -p tcp -s ...

  6. debezium关于cdc的使用(上)

    博文原址:debezium关于cdc的使用(上) 简介 debezium是一个为了捕获数据变更(cdc)的开源的分布式平台.启动并指向数据库,当其他应用对此数据库执行inserts.updates.d ...

  7. window.prompt()和 window.confirm()选择

    代码截图: 效果:  代码截图: 效果:

  8. 常用的商业级和免费开源Web漏洞扫描工具

    Scanv 国内著名的商业级在线漏洞扫描.可以长期关注,经常会有免费活动.SCANV具备自动探测发现无主资产.僵尸资产的功能,并对资产进行全生命周期的管理.主动进行网络主机探测.端口探测扫描,硬件特性 ...

  9. 20、Nginx高可用架构

    1.Keepalived高可用基本概述 1.1.什么是高可用 一般是指2台机器启动着相同的业务系统,当有一台机器down机了, 另外一台服务器能快速的接管, 对于访问的用户是无感知的. 1.2.高可用 ...

  10. IIS 程序池优化配置方案

    内容目录 IIS 程序池优化配置方案IIS高并发配置一.IIS站点绑定程序池设置二.支持万级并发请求 IIS 程序池优化配置方案 最近由于系统的客户越来越多,有客户反映访问速度变慢,尤其是api的请求 ...