「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 面暴虐。

睡觉。

posted @ 2024-01-05 08:07  Eon_Sky  阅读(14)  评论(0编辑  收藏  举报