做题记录 25.3.29

\(\textcolor{blue}\odot\) CF1967C Fenwick Tree

先考虑正向操作

\(a\) 的一次 \(f\) 变换相当于每个结点将自己的值累加到所有祖先上(这个操作是同时进行的,相当于对这条链做前缀和)

若做了 \(k\) 次变换,\(u\) 对其 \(t\) 级祖先的贡献次数相当于一个数组初始 \(p_0=1\),做 \(k\) 次前缀和后 \(p_t\) 的值,可知为 \(\binom{k+t-1}t\)

从左到右枚举结点,枚举父亲将贡献消除即可

注意组合数的处理

时间复杂度 \(O(\sum n\log n)\)

代码

参考

\(\textcolor{blue}\odot\) CF1965C Folding Strip

结论:当相邻两个字符相同时,中间需要翻折以下

模拟这个过程是容易的,考虑如何证明

对于长度 \(>2\) 且为奇数的同色连续段显然,对于长度 \(>2\) 且为偶数的同色连续段,除了第一个间隔外显然

这样只需要考虑长为 \(1/2\) 的连续段

从左到右考虑每个长为 \(2\) 的连续段,吗,每遇到一个,就从右边向左边翻转,这样时刻保证已经处理完的部分是 \(0/1\) 间隔的,且显然长度最小(若不翻转,则只能把多余部分延伸出去,显然不优于翻折起来)

时间复杂度 \(O(\sum n)\)

代码

参考

posted @ 2025-03-30 19:59  Hstry  阅读(3)  评论(0)    收藏  举报