19南京区域赛 H题(思维)

19南京区域赛 H题(思维)

本题参考的大佬的简书链接:
https://www.jianshu.com/p/2f27315f10d8

题目大意:王子求婚公主,但皇后想阻拦。宫中有三种群体,公主为首
赞成婚礼的,皇后为首不赞成婚礼的,毫不关心的吃瓜路人。这三种人
分别有a,b,c个,并且每个人都在独立的房间,都知道自己在哪,也
知道别人在哪。且王子知道三类人的数量。这些人分别待在各自
的房间,王子可以向房间内的人提以下三种问题
1)你是谁
2)在X房间内的人是谁
3)公主在哪个房间
所有人都会回答问题,但赞成婚礼的人会提供正确的答案,不赞成的
人会提供错误的答案,吃瓜路人的答案可能正确可能错误。问现在王
子至少要问几个问题就能确保找到公主所在的房间,如果永远不能则
输出NO.

1.理解题中的隐含意义

(1)王子会通过问问题来推理出公主在哪,所以不赞成的人会回答错误答案来打乱王子的思路,让王子分不清谁是对的谁是错的。
(2)吃瓜路人的回答具有随机性。要确保王子找到公主,那么就要考虑最坏的情况,即把吃瓜路人等价于不赞成的人。

2.分情况讨论

由上述第(2)条可得,我们要把吃瓜路人和不赞成的人并为一类。那么此时 我们就把这两类人统称为坏人
(1)若为 1 0 0 (容易忽略的情况)
王子知道每一类人有多少个,这种情况是只有公主一个人。所以。。。还问啥啊,直接抱走啊 (✧◡✧)
(2)若 a=b+c
即赞成的人=坏人
首先赞成的人肯定回答都是一样的,即
问 公主在哪个房间 他们都会回答 在y房间,那么我们会得到a个答案1。
那么这时候,捣乱小分队上线了,嘿嘿嘿 ๑乛◡乛๑
怎么才能阻止王子找到公主呢,只需要坏人统一回答一个错误答案,那么我们会得到(b+c)个答案2。此时,a=(b+c),两个答案个数相同,那么王子就判断不出来谁真谁假了。
(3)若a>b+c
即赞成的人比坏人多。
先考虑最坏情况,即我们一开始询问的都是坏人。即我们问了(b+c)个坏人。此时所有的坏人都问完了,剩下的没问的人都是赞成的人。这时我们再问(b+c)个人(这些都是赞成的人了),那么结果和情况(2)是相同的,我们会得到(b+c)个答案1和(b+c)个答案2。此时只需要再问一个人,就会得到(b+c+1)个答案1和(b+c)个答案2。那么答案1的个数大于答案二的个数,王子就能判断出答案1是正确答案,就可以找到公主。
所以至少我们要问2*(b+c)+1次。

王子知道赞成的人多且赞成的人都会说真话,那么回答的最多的答案,就是正确的。
(4)若a<b+c
即赞成的人小于坏人。
那么b+c=x*a+y。即把坏人拆分成x个和赞成的人人数相同的集体,最后可能会余下y个人(0<=y<a)。那么这x个集体只要回答不同的答案。那么王子肯定会得到与正确答案个数相同的错误答案,那么就又转到了情况(2),王子就不能判断了
王子说:我太难了**(;´༎ຶД༎ຶ`)**

3.代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a,b,c,d;
    cin>>a>>c>>d;
    b=c+d;
    if(a==1&&b==0)cout<<"YES"<<endl<<'0';
    else
    {
        if(a==b)cout<<"NO";
        else if(a>b)cout<<"YES"<<endl<<2*b+1;
        else cout<<"NO";
    }
    return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值