其他分享
首页 > 其他分享> > IOI2022

IOI2022

作者:互联网

鲶鱼塘 \((\texttt{Easy} \ 0 / 3)\)

设第 \(i\) 列的高度为 \(h_i\),若 \(h_{i - 1} > h_i < h_{i + 1}\),则可以直接令 \(h_i = 0\)。

于是可以设 \(f_{i, j}\) 表示 \(h_{i - 1} \le j = h_i\) 的答案;\(g_{i, j}\) 表示 \(h_{i - 1} > j = h_i\) 的答案,则根据上面的性质可以方便地转移。

注意到一个状态 \((x, y)\) 有效当且仅当 \(y = m - 1\) 或 \((x, y + 1)\) 有鲶鱼,于是可以把状态数缩到 \(\mathcal{O}(n + m)\),时间复杂度 \(\mathcal{O}((n + m) \log m)\)。

囚徒挑战 \((\texttt{Easy} \ 3 / 5)\)

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

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

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

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

无线电信号塔 \((\texttt{Medium} \ 4 / 4)\)

明天写。

数字电路 \((\texttt{Easy} \ 2 / 1)\)

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

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

时间复杂度 \(\mathcal{O}(n \log n)\)。

最罕见的昆虫 \((\texttt{Medium} \ 4 / 3)\)

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

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

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

千岛 \((\texttt{Easy} \ 3 / ?)\)

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

标签:容器,Easy,可以,texttt,IOI2022,答案,mathcal
来源: https://www.cnblogs.com/Scintilla/p/16637705.html