【杂题】[ARC070F] Honest Or Unkind【交互】
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【交互】的更多相关文章
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
- dp杂题(根据个人进度选更)
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
- wangkoala杂题总集(根据个人进度选更)
CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- Atcoder&CodeForces杂题11.7
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- 【Java面试】-- 杂题
杂题 2019-11-03 21:09:37 by冲冲 1.类加载器的双亲委派机制 类加载器:把类通过类加载器加载到JVM中,然后转换成class对象(通过类的全路径来找到这个类). 双亲委派机制 ...
- 贪心/构造/DP 杂题选做Ⅱ
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
随机推荐
- windows10专业版激活
[1]右击我的电脑->属性,查看激活情况 [2]管理员身份打开CMD [2.1]如果不知道CMD是什么东西 [2.2]如果上面那个也找不到,直接按windows键(就是ctrl和alt中间那个键 ...
- SQL SERVER 字符串函数 STUFF()
说明: STUFF 函数将字符串插入到另一个字符串中. 它从第一个字符串的开始位置删除指定长度的字符:然后将第二个字符串插入到第一个字符串的开始位置. 语法: STUFF ( character_ex ...
- “automation服务器不能创建对象”的问题的解决方案大全
本人工作中的应用系统都是jsp的,大量javascript程序,一旦出“automation服务器不能创建对象”问题,大量报表及查询无法保存,苦思冥想.千尝万试,终于将其搞定,现将相关方案与大家共享. ...
- 为什么 ConcurrentHashMap 的读操作不需要加锁?
现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了.最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默.所以忍不住分享一下给大家 ConcurrentH ...
- MyISAM与InnoDB的索引差异
数据库的索引分为主键索引(Primary Index)与普通索引(Secondary Index).InnoDB和MyISAM是怎么利用B+树来实现这两类索引的,又有什么差异呢?一.MyISAM的索引 ...
- python基础数据类型和初级应用
1.整数: int -- 计算和比较 2 -- 10 推位 8421 20 21 -- 2**7 10 - 2 bit_length 二进制的有效占用位数 # 123 # 计算和比较 # 14 0 # ...
- HTML5网页文档结构
2.1 Web标准 Web标准,使得Web开发更加容易.Web标准由万维网联盟(W3C)制定. 2.1.1 Web标准概述 Web标准的最终目的就是保证每个人都有权力访问相同 ...
- NIO、BIO、AIO
BIO(同步阻塞):Socket编程就是 BIO ,操作时会阻塞线程,并发处理能力低 .阻塞的原因在于:操作系统允许的线程数量是有限的,多个socket申请与服务端建立连接时,服务端不能提供相应数量的 ...
- C# 面向对象8 值类型和引用类型
值类型和引用类型 概念 示意图: 1.值类型,在栈中开辟一块空间,存储 2.引用类型,在堆中开辟一块空间,存储数据,然在栈中开辟一块空间存储堆中的数据的地址
- 数据库 (二):MySQL密码策略与用户管理
为了加强安全性,MySQL5.7为root用户随机生成了一个密码可通过# grep "password" /var/log/mysqld.log 命令获取MySQL的临时密码用该密 ...