题意
有 a a a个只说真话的人(其中一位是公主), b b b个只说假话的人, c c c个回答可以为真可以为假的人。向这些人进行询问,可以进行三种询问,分别为询问回答者的身份,其他任意一个人的身份或谁是公主
解题思路
感觉这题模拟即可,只是读懂这个题目的 t r i c k trick trick很难。其实发现问什么问题不重要,只要 a > b + c a>b+c a>b+c,就一定YES,问的人数就是 2 ∗ ( b + c ) + 1 2*(b+c)+1 2∗(b+c)+1。但这还不够,仔细观察下面这句话:
- They will never refuse to answer the questions, but may not tell the truth. People, including Princess Tofu herself, who support this marriage will present the facts.
意思是,公主也在支持者的范围内,可能会问到公主。也就是支持者至少有一个人,即公主。如果这个理解不了的话看 a a a的范围 ( 1 ≤ a ≤ 2 × 1 0 5 ) (1 \leq a \leq 2×10^5) (1≤a≤2×105)。所以就是当 a a a为 1 1 1且 a > b + c a>b+c a>b+c时,什么都不要问,请他们立刻原地结婚
PS:仔细多读几遍题目并不是坏事,可能经常有遗漏的细节
代码:
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a>(b+c)){
if(a==1)
printf("YES\n0");
else printf("YES\n%d",2*(b+c)+1);
}else printf("NO\n");
return 0;
}