本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
【ICPC】2019南京站 H. Prince and Princess | 签到
题目链接
题目
题目大意
从前有一个 A 国公主想和 B 国王子在一起,但是 A 国王后不同意。于是 A 国王后设计了一个游戏,如果 B 国王子取得了胜利就允许他们在一起。游戏规则如下:
在 个封闭的房间里,每个房间里都有一个人。其中 个人赞同他们的婚事(其中有一个是 A 国公主), 个人反对, 个人并不关心。他们都知道自己和其他的每个人的位置。王子被要求找到公主,他唯一可以获取信息的方式是他可以向任何房间里的人询问以下三类问题:
- 你是谁?
- 谁住在指定的房间?
- 公主住在哪个房间?
房间里的人不会拒绝回答问题,但可能不会说出真相。支持这段婚姻的人(包括豆腐公主本人)将陈述事实。反对这段婚姻的人总会给出错误的答案。其他参与者将给出任意答案。
求最坏情况下王子确定公主的位置的询问次数。如果不可能,输出 -1。
思路
考虑在什么情况下可以找到公主。
如果说真话的人比说假话的和随便乱说的人多,那么询问所有人公主在哪,得票最多的位置一定就是公主所在的位置。需要询问多少次呢?询问所有人公主在哪,直到认为公主在位置 的人的数量大于 ,此时我们可以认定公主在位置 。则我们在最坏情况下最少需要询问 次。
另外在 , 和 均为 0 的时候,无需进行询问。
代码
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
while (scanf("%d%d%d",&a,&b,&c)!=EOF)
{
int ans=0;
if (a<=b+c)
{
printf("NO\n");
continue;
}
if (!(a==1&&b==0&&c==0)) ans=b+b+c+c+1;
printf("YES\n%d",ans);
}
return 0;
}