原题链接:https://nanti.jisuanke.com/t/42402
思路:
- 理解题意:有A个好人,B个坏人,C个路人,题目考虑的是最坏情况,所以就是A个好人,B+C个坏人。
- 忽略一二问题,只关注第三个问题—公主在哪个房间,只能根据他们的话来判断,所以—哪个房间号被说的多就是哪个,最坏情况就是B+C串通一气说了同一个错误的房间号,这时候就需要A比B+C多,才能够判断出来。
- 解决答案:王子需要问A+B+C次嘛,不需要⑧,我们做这么多的目的就是为了,让好人的答案,比坏人的答案多一个就够了,因为你已经提前知道了坏人一共有 B+C 个,所以只需要问B+C+1 个好人就够啦,所以输出的是(B+C)*2+1就好啦。
- 坑:需要特判一下,A=1,B=0,C=0的情况,因为如果只有一个好人的话,就是公主啦,那么只有一个房间,直接原地结婚就好啦,输出0。
- 为什么只看第三个问题:第一个问题,就和狼人杀一样,都是好人不能判断;第二个问题,1-n房间住着的是谁,找到公主房的话,问好人也要n次,次数明显增很多。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
if(a<=(b+c)) cout<<"NO"<<endl;
else{
cout<<"YES"<<endl;
if(a==1&&b==0&&c==0) cout<<"0"<<endl;
else cout<<2*(b+c)+1<<endl;
}
return 0;
}