Loading

24.7 杂题

时隔一年啊,不会复建、、、

[HNOI2012] 与非*

这个 \(\operatorname{NAND}\) 实际上可以做出任何位运算操作。而所有的位运算有一个性质,就是说如果两个位一样,那么操作完还是一样的。如果全部 \(a\) 中这些位置都相同,那么最后理应也相同。也就是假设对于所有 \(n\)\(a\),这两个位置都是相同的,那么就应该一直是相同。找到等价类的数量,求 \(2\) 的次幂即可。

后面的部分就是数位 dp 了,具体来说我们枚举每个位置是什么值,然后判断一下这个地方是不是已经被确定了 \(0/1\)。这就是一些 trival 的东西。

[ARC172E] Last 9 Digits*

注意到 \(x\)\(10^k\) 互质,这里 \(n\) 也应该和 \(10^k\) 互质,所以就有可能可以使用欧拉定理。虽然目前看起来没什么用,但是我们稍微枚举一下,发现 \(10^9\)\(10^8\) 应该没什么两样。于是看看换成 \(1000\) 有什么区别。一番操作下来,发现又是直接按位枚举就好,因为大的满足,小的也必须要满足,然后就做完了。

[BJOI2020] 封印

套娃题,考虑建处 SAM 然后求出每个 \(i\) 的最长后缀匹配上了 \(t\) 的一个字串。然后问题变成了求 \(\max_{i=l}^r \min(i - l + 1, a_i)\),考虑拆 \(\min\),若 \(i-l+1\le a_i\)\(i-a_i+1\le l\),那么找到一个最大的 \(i\) 即可。考虑在线怎么求,二分答案然后求区间最值即可。剩下的部分直接求 rmq 即可。

「MCOI-08」Fast Enumeration*

w33z 的奇怪题。

CF1637E Best Pair

注意到不同的 cnt 只有根号种,所以对于每两种暴力遍历最大的若干组,排除特殊的 \(m\) 组即可。

CF1628D2 Game on Sum (Hard Version)

不妨把范围缩小到 \([0,1]\) 最后再乘以 \(k\),考虑 dp,记 \(f_{i,j}\) 代表局面为 \((n,m)\) 时的答案,假设这一步 A 选的数是 x,则 \(f_{i,j}=\min (f_{i-1,j-1}+x,f_{i-1,j}-x)\),因为 B 要最小化。那 A 的选择其实就是刚好要他们两个相等也就是 \(x=\dfrac{f_{i-1,j}-f_{i-1,j-1}}{2}\)。这个数显然是一个 \([0,1]\) 之内的数,而真正的转移就是 \(f_{i,j}=\dfrac{f_{i-1,j-1}+f_{i-1,j}}{2}\),看起来就很格路计数,考虑边界情况 \(f_{i,i} = i\),计算每个边界对答案的贡献即可。

CF1710B

只有所有开始降水的地方可能不满足条件,随便推一推每个位置的情况,满足几个不等式的就是答案。

CF1654D Potion Brewing Class

固定根之后可以推出每个点和根的关系,分解质因数然后每次更新是 \(O(\log V)\) 的。最后的答案即为分母的最小公倍数。

posted @ 2024-07-05 15:13  Semsue  阅读(9)  评论(0编辑  收藏  举报
Title