IOI2022

提醒:因为 day1 的题目不是刚做的,所以这篇题解就摆烂没好好写了。

鲶鱼塘 (Easy 0/3)

设第 i 列的高度为 hi,若 hi1>hi<hi+1,则可以直接令 hi=0

于是可以设 fi,j 表示 hi1j=hi 的答案;gi,j 表示 hi1>j=hi 的答案,则根据上面的性质可以方便地转移。

注意到一个状态 (x,y) 有效当且仅当 y=m1(x,y+1) 有鲶鱼,于是可以把状态数缩到 O(n+m),时间复杂度 O((n+m)logm)

囚徒挑战 (Easy 3/5)

先考虑一个做法:从高到低查询 n 的二进制位,这样可以得到一个 m=O(logn) 的做法。

发现可以对于每一位采用不同的进制,搜索最优解可以做到 m=24

发现如果当前的数是可能范围的最大值 / 最小值的话就已经能确定答案了,所以可以在原来的基础上每轮把范围多 2,搜索最优解可以做到 m=20

非常难写。学了一下最短解的做法,非常厉害。

无线电信号塔 (Medium 4/4)

先考虑 d 固定的情况。设 li,ri 表示 i 左右两侧第一个高度不低于 hi+d 的信号塔的编号,易于证明 [li,ri) 这些区间要么不交,要么包含,那么我们肯定选择那些不包含其他区间的区间。

我们求出所有有效的三元组 (l,i,r)。对于 [L,R] 的询问,首先我们把所有 i[L,R] 的三元组拿出来,这些显然是可选的;此外,我们在左右两侧各可能再多选择一个信号塔,考虑如何判定这个东西。

设最左边的三元组为 (l,i,r)p=\argmaxLj<ihj,那么可以证明我们选择的信号塔一定在 p 左侧,直接判断即可。注意当我们一个三元组都选不出的时候需要特殊处理一下。

于是我们解决了 d 固定的情况。发现对于一个 d,若 [lj,rj) 包含了 [li,ri),则对于 d>d 我们都有 j 的区间会包含 i 的区间。所以使用可持久化线段树维护所有三元组的 i 即可。

数字电路 (Easy 2/1)

先考虑如果钦定了每个点的颜色,如何求出方案数。如果 uk 个儿子是 1 并且 u 也是 1,那么 puk 种选择;否则有 cuk 种选择。这相当于对于每个点 u 选择一个与之颜色相同的儿子的方案数,即链剖分的方案数,要保证 1 是黑色当且仅当其所在的链对应的叶子是黑色。

所以我们可以枚举 1 所在的链的叶子,那么其他的点随意选儿子均可对应一种方案。所以叶子之间对答案的贡献是独立的,可以用线段树维护。

时间复杂度 O(nlogn)

最罕见的昆虫 (Medium 4/3)

考虑一个做法:我们依次加入每一个数,如果查询的结果 >1 即弹出这个数,那么我们可以得到所有颜色各一个,即可以得到颜色种类数。我们删去这些位置之后再进行一遍上面的过程,如果颜色数量减少就说明答案为 1;反之可以一直进行。

考虑扩展一下,首先得到颜色数量 t,保持众数出现次数 x,那么答案 x 当且仅当最后容器中一共有 tx 个数,于是可以二分答案。

考虑卡常。如果发现答案 x,那么我们可以把当前容器内的数锁在容器里,在以后的操作中不把它们挪出容器;反之,我们可以把当前容器外的数锁在容器外,在以后的操作中不把它们挪进容器,易于证明这样做的正确性。再把二分上界改为 nt 即可通过。

千岛 (Easy 3/?)

胡了一个做法,大概是如果起点的出度 >1 则必然存在解,否则可以递归求解;构造是找环之类的,要分类讨论。看了下其他题解,好像挺对的,有时间把代码补了。

一般我写下这句话就意味着我不会写代码了。

posted @   Scintilla06  阅读(259)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示