「Log」2024.1.4 小记
序幕
\(\text{6:40}\):上班,今天继续攻克扩展欧拉定理。
\(\color{blueviolet}{P3747}\)
磨了好几天可算会了。
参考 P4139,递归进行降幂时最终模数会为 \(1\),这种递归的深度是 \(\log\) 级别的,因为每次偶数的欧拉函数都会至少减半。
也就是说如果一个位置被操作很多次之后,这个位置本来的值 \(a_i\) 会被忽略,再进行操作值也不会变,这个上界就是递归的深度。
对于 \(c\),预处理其 \(10^8\) 以内的光速幂(在不同模数下,模数即上述递归中每次指数的模数)。
对于 \(a_i\),预处理其操作 \(0\) 次到上界之间的所有值,直接递归求解即可。
然后套线段树维护区间和以及最小操作次数即可。
间幕 \(1\)
中午吃点香的,点了份披萨。
吃饱了呼呼睡。
\(\color{blueviolet}{P3748}\)
答辩题。
设 \(f_{i, 0/1/2/3}\),分别表示(均认为节点 \(i \not= 1\) 有一向子树外的连通块):
-
节点 \(i\) 子树内去掉一条以节点 \(i\) 为端点的链得到的最大连通块数量。
-
节点 \(i\) 子树内去掉一条不经过节点 \(i\) 的链得到的最大连通块数量。
-
节点 \(i\) 子树内去掉一条经过 \(i\) 节点的链得到的最大连通块数量。
-
节点 \(i\) 子树内去掉一条以节点 \(i\) 为端点的链,再去掉一条不经过节点 \(i\) 的链得到的最大连通块数量。
转移是繁琐的,过于繁琐了,懒得细说,反正会了。
\(\color{blueviolet}{P3750}\)
不难,但很有质量,我直接大呼好题。
首先最优策略是固定的,显然开着的最高位开关肯定要操作,最优次数从高往低扫一遍即可,而且每个开关不能被别的开关代替。
设 \(f_i\) 表示从还有 \(i\) 个开关需要被操作的状态到还有 \(i - 1\) 个的期望操作次数,根据意义可以列出以下式子:
\(f_i = \frac{i}{n} + \frac{n - i}{n} (f_i + f_{i + 1} + 1)\)
\(\frac{i}{n}\) 即有 \(\frac{i}{n}\) 的概率操作对一个,后半部分即操作错之后要操作回来的期望。
可以当成一个一元一次方程解出 \(f_i\) 的递推式子。
边界状态较为显然 \(f_n = 1\)。
首先最开始求出 \(cnt\) 表示初始状态下需要操作多少次,如果 \(cnt <= k\) 那么 \(cnt\) 就为答案,否则答案为 \(k + \sum \limits_{k< i \le tem} f_i\)。
答案最后要乘以阶乘。
\(\color{blueviolet}{P4363}\)
非常好题目,第一次见这种状压。
每一层不能比上一层多,考虑状压表示轮廓线,从左下到右上 \(0\) 表示横线,\(1\) 表示竖线。
需要从初始状态向后递推,否则最优子结构无法保证,深搜一下即可。
间幕 \(2\)
吃晚饭,酸菜排骨,顶级!
接着开下一道省选题,基本贪心看懂了,题解里又没说怎么实现。
发现代码是神秘的,不懂。
这题所有题解都是傻逼。
回家加班,发现左侧不需要修改是因为右侧一定有合法点,所以优先向右走不会涉及到左侧贡献,合理的,如果一个数被选过了就往后选。
\(\color{blueviolet}{P4364}\)
普通贪心是简单的,可以有 \(55pts\)。
每次把最大合法点拿出来,相等的连续一段从右侧向左取,线段树维护当前点靠左的空位数量,线段树上二分即可。
尾声
打会蔚蓝,被 B 面暴虐。
睡觉。