2019 ACM ICPC 南京站 H. Prince and Princess

题意

王子想要娶公主,但是需要完成一个挑战:在一些房间中找出公主在哪。

每个房间有一个人,他们彼此知道谁在哪个房间。可以问他们三种问题:

  • 你是谁?
  • 在某个房间是谁?
  • 公主在哪个房间?

有三类人,一类一定说真话,一类一定说假话,一类可能说真话可能说假话。

王子知道这三类人的人数分别为 \(a\), \(b\), \(c\),求能否通过问一些问题找到公主在哪,如果能,输出最少需要的问题数。

思路

第三类人有可能说假话,因此最坏情况就是说假话,所以把他们视为第二类人。

首先问所有人第三个问题,那么最坏情况就是说真话的人都说出公主的位置,说假话的人都选择一个不是公主的人说他是公主。所以最后只会问到两个位置。那么只要说真话的人数量比较多,就一定能确认公主在哪个房间。否则是无法确定的。所以我一开始以为问问题的次数为 \(a + b + c\)。

后来队友给了个样例,发现其实不需要问这么多,只要说真话的人比说假话的人多就行。也就是说假话的只有 \(b + c\) 个人,那么只要再问说真话的 \(b + c + 1\) 个人就可以了。

还有特殊情况,就是所有人都说真话,只要问一个人就行了。

还有更特殊的情况(队友想到的),就是 \(1 0 0\) 的情况,不需要问问题,因为那个人就是公主。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
    ll a, b, c;
    cin >> a >> b >> c;
    if(b == 0 && c == 0) {
        cout << "YES" << endl;
        if(a == 1) cout << 0 << endl;
        else cout << 1 << endl;
    } else if(a > b + c) {
        cout << "YES" << endl;
        cout << (b + c) * 2 + 1 << endl;
    } else {
        cout << "NO" << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/wulitaotao/p/11749342.html

时间: 2024-11-05 22:54:05

2019 ACM ICPC 南京站 H. Prince and Princess的相关文章

2016年acm icpc 青岛站(中国石油大学(华东))总结

2016年acm icpc 青岛站(中国石油大学(华东))总结 2016年11月11日,在这个传说中所谓的单身节,我们出发了,做了整整一天的车来到了青岛.不得不提一下,作为一个身处华中沿海地区的童鞋,这是我人生第一次坐了这么久的高铁(真的无聊,无聊,无聊),然后到了青岛是晚上了(挤公交车真的是一件很刺激的事情). 海风那个吹, 海水那个涌, 冻得萌新瑟瑟发抖. 也许是知道我们要来挖石油的缘故吧, 老天爷特意给了我们三天晴天. 晚上也没啥事,就这么洗洗睡了,不对还有传说中学长带领学弟剁手呢! 第二

2018 ACM/ICPC 南京 I题 Magic Potion

题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参考代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define INF 0x3f3f3f3f 4 const int maxn = 2100; 5 int n,m,k,s,t,u,v,w,num,num1; 6 struct Edge

zoj 3662 第37届ACM/ICPC长春赛区H题(DP)

题目:给出K个数,使得这K个数的和为N,LCM为M,问有多少种 f[i][j][k]表示选i个数,总和为j,最小公倍数为k memery卡的比较紧,注意不要开太大,按照题目数据开 这种类型的dp也是第一次做 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue&g

2018年10月14日ICPC南京站参赛总结

这次比赛消耗掉了我们全部的信心和精力 在热身赛上,总体来说还是比较愉快的,这个时候心态就不对 正赛的时候我们遇到了A题签到题 我一开始是读错了题意了,认为这个题是一个裸的SG函数,而且那么多人秒过 WA了之后立刻发现了读错了题,这个时候状态就已经爆炸了 然后在各种错误的方向上推理+大脑空白 在快4h的时候,才有了正确的想法 去想怎样才是最机智的决策,换句话说是找规律 难受 然后同时开的J,我写了个暴力交上去了,我竟然以为那个复杂度不是O(n^2)的,脑子呢?? 其实我也隐约想到了计算每一个约数对

H - Prince and Princess - HDU 4685(二分匹配+强连通分量)

题意:有N个王子M个公主,王子喜欢一些公主,而且只能是王子喜欢的人,他们才可以结婚,现在让他们尽可能多的结婚的前提下找出来每个王子都可以和谁结婚. 分析:先求出来他们的最大匹配,因为给的数据未必是完备匹配,所以需要添加一些点使他们成为完备匹配才能求出来的环是完整的,比如第二组数据: 1 2   2 1 2 如果不添加虚拟点做成匹配,只会匹配成功一个,这样就找不出来环了,所以需要添加虚拟的王子和公主,虚拟的王子喜欢所有的公主,虚拟的公主被所有的王子喜欢,注意都是王子喜欢公主的,公主没有选择喜欢的权

2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5984 Pocky 题意 给出一根棒子(可以吃的)的长度x和切割过程中不能小于的长度d,每次随机的选取一个位置切开,吃掉左边的一半,对右边的棒子同样操作,直至剩余的长度不大于d时停止.现在给出x和d,问切割次数的数学期望是多少. 解题思路 当看到第二个样例2 1时,结果是1.693147,联想到ln

《ACM/ICPC 算法训练教程》读书笔记一之数据结构(堆)

书籍简评:<ACM/ICPC 算法训练教程>这本书是余立功主编的,代码来自南京理工大学ACM集训队代码库,所以小编看过之后发现确实很实用,适合集训的时候刷题啊~~,当时是听了集训队final的意见买的,感觉还是不错滴. 相对于其他ACM书籍来说,当然如书名所言,这是一本算法训练书,有着大量的算法实战题目和代码,尽管小编还是发现了些许错误= =,有部分注释的语序习惯也有点不太合我的胃口.实战题目较多是比较水的题,但也正因此才能帮助不少新手入门,个人认为还是一本不错的算法书,当然自学还是需要下不少

2014 ACM/ICPC Asia Regional Guangzhou Online Wang Xifeng&#39;s Little Plot HDU5024

一道好枚举+模拟题目.转换思维视角 这道题是我做的,规模不大N<=100,以为正常DFS搜索,于是傻乎乎的写了起来.各种条件限制模拟过程 但仔细一分析发现对每个点进行全部八个方向的遍历100X100X100^8 .100X100个点,每个点在走的时候8中选择,TLE 于是改为另一个角度: 以符合要求的点为拐弯点,朝两个垂直的方向走,求出最远的距离.这样只要对每个点各个方向的长度知道,组合一下对应的就OK. 避免了每个点深搜. PS:搜索的时候x,y写反了,导致构图出现问题,以后用[dy][dx]

2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp

odd-even number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 388    Accepted Submission(s): 212 Problem Description For a number,if the length of continuous odd digits is even and the length