2023.01.14 欧洲信息学竞赛题目选讲 学习笔记
讲课人:钟诚。
WC2023 Day2 下午的课。
来放放松。
1.QOJ#5430. Triangeltal
将所有 从小到大排序后,可以用调整法说明如果有解,存在一种取三段连续区间的解。假设选的三段分别是 。枚举 ,一种情况是 ,可以发现 时最优;另一种情况是 ,可以发现 时最优。
时间复杂度 ,空间复杂度 。
2.Gym104230C Toy Design
假设我们已经有 个设计,其中第 个设计中前 个引脚连通,且相比 号设计多的边都只在前 个引脚之间。现在考虑第 个引脚,询问第 个引脚和第 个设计中 号引脚会得到在 号设计中第 个引脚和第 个引脚是否连通,于是可以通过二分在 次询问内得到在 号设计中 中和 连通的最小编号(或不存在),并且一定会新得到一个设计满足前 个引脚连通,且相比 号设计多的边都只在前 个引脚之间。
询问次数为 。
3.QOJ#4208. Flight to the Ford
时刻维护两个集合 和 ,表示最后一次询问得到答案在 中、不在 中,可能成为答案的集合。初始时 。之后每次找一个集合 ,如果要猜的数在 中,则传递 ,否则传递 。如果收到 则让 ,;如果收到 则让 ,。可以发现这样正确答案一定会留在 中。为了每次尽可能稳定地减小 ,取 一半的元素 一半的元素,经计算 次以内可以把 缩减为 ,之后将三个数编码为 再传递 次即可。
4.QOJ#193. Climbers
设 表示一个人在 另一个人在 的最小体力值,考虑每个人往左或往右走,每个点只会连出 条边,直接跑最短路。
时间复杂度 ,空间复杂度 。
5.LOJ#3884. 「eJOI2022」寻找树根 / Where Is the Root?
称度数为 的节点为叶节点,度数 的节点为中间节点。一种暴力的想法是,询问所有点对,对于一个点 如果在所有询问 中都返回了 YES
,那就称其为候选节点,可以发现根一定是候选节点。如果恰好有一个候选节点,那么它就是根。
否则,有结论:如果有多个候选节点,那么根节点一定是叶节点!这是因为如果根节点度数 ,根的所有子树里都不可能有候选节点。
又有结论:不是根的候选节点全是中间节点!这是因为存在点度数至少为 ,说明有至少 个叶节点,而对于任意两个不是根的叶节点返回的都是 NO
。
所以如果有不止一个候选节点,那么根就是所有叶节点中唯一一个候选节点。
现在考虑先询问一次所有叶节点,于是可以知道根节点是否是叶节点。如果是中间节点,可以给中间节点一个顺序,每次二分询问一段前缀和所有叶节点,它们的 LCA 一定是根节点;如果是叶节点,可以给叶节点一个顺序,每次二分询问一段前缀,它们的 LCA 只可能是中间节点或根节点(注意只剩两个叶节点时需要一些特判)。一共需要 次。
考虑给所有节点一个顺序,使得叶节点都在中间节点的前面。每次二分询问一段前缀,由以上两种情况可以发现返回 YES
当且仅当根节点在这些前缀中,再特判一下只剩两个叶节点时情况即可。询问次数降到了 次。
6.QOJ#4401. Prize
没讲。
7.Gym103806B MCD
问 可以知道 二进制下的最低位,在此基础上问 加上之前得出的最低位可以知道 二进制下的第二低位,以此类推。这样最坏要 次,如果随机打乱一下期望要问 次。
其实除了最低位外其余位根本不需要再问一次 加上之前得到的结果,也就是说期望总次数可以降到 次。
8.[First Round SOI 2021/2022]Claw Sort
没讲。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端