做题记录 25.5.29

\(\textcolor{purple}\odot\) CF1821F Timber

假定对于一种树的放置方式,从左往右考虑,能向左倒就向左,否则向右,这样一种倾倒方式唯一对应一种放置方案

\(f_{i,j}\) 表示前 \(i\) 棵树,第 \(i\) 棵覆盖到 \(j\) 位置的方案数

则转移为

\[2f_{i,j}\to f_{i+1,l}\;(k+1\le l-j\le 2k)\\ f_{i,j}\to f_{i+1,l}\;(l-j>2k) \]

答案为 \(\sum_j f_{m,j}\)

显然 \(f_{u,\ast}\)\(\text{OGF}\)\(\left(\sum_{t=k+1}^{2k}2x^t+\sum_{t=2k+1}^{\infty}x^t\right)^u\)

因此答案为 \(\left(\sum_{t=k+1}^{2k}2x^t+\sum_{t=2k+1}^{\infty}x^t\right)^m\) \(x^0\)\(x^n\) 项的系数和

使用多项式快速幂可以做到 \(O(n\log n)\),但常数过大

答案为

\[\begin{aligned} &\sum_{t=0}^n [x^t]\left(\sum_{t=k+1}^{2k}2x^t+\sum_{t=2k+1}^{\infty}x^t\right)^m\\ =&\sum_{t=(k+1)m}^n [x^{t-(k+1)m}]\left(\sum_{t=0}^{k-1}2x^t+\sum_{t=k}^{\infty}x^t\right)^m \end{aligned} \]

\[\begin{aligned} &\sum_{t=0}^{k-1}2x^t+\sum_{t=k}^{\infty}x^t\\ =&\sum_{t=0}^{\infty}2x^t-\sum_{t=k}^{\infty}x^t\\ =&\sum_{t=0}^{\infty}2x^t-x^k\sum_{t=0}^{\infty}x^t\\ =&(2-x^k)\sum_{t=0}^{\infty}x^t\\ =&\frac{2-x^k}{1-x}\\ \end{aligned} \]

因此答案等于

\[\begin{aligned} &\sum_{t=(k+1)m}^n [x^{t-(k+1)m}](2-x^k)^m\left(\frac1{1-x}\right)^m\\ =&\sum_{t=0}^{n-(k+1)m} [x^t](2-x^k)^m\left(\frac1{1-x}\right)^m \end{aligned} \]

\(f_t=[x^{kt}](2-x^k)^m=\binom mt(-1)^t 2^{m-t}\)\(g_t=[x^t]\left(\frac1{1-x}\right)^m=\binom{t+m-1}t\)\(h\)\(g\) 的前缀和数组,容易 \(O(n)\) 处理,则答案为

\[\begin{aligned} &\sum_{ki+j\le n-(k+1)m}f_ig_j\\ =&\sum_{ki\le n-(k+1)m}f_i h_{n-(k+1)m-ki}\\ \end{aligned} \]

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

代码

参考

\(\textcolor{purple}\odot\) CF1817C Similar Polynomials

\(a_i=[x^i]A\)\(b_i=[x^i]B\),则

\[\begin{aligned} A(x+s)=&\sum_{i=0}^n a_i (x+s)^i\\ =&\sum_{i=0}^n a_i \sum_{j=0}^i \binom ij x^js^{i-j}\\ =&\sum_{j=0}^n \sum_{i=j}^n a_i\binom ij s^{i-j} x^j\\ =&\sum_{i=0}^n b_ix^i = B(x) \end{aligned} \]

因此

\[b_i=\sum_{j=i}^n a_j\binom ji s^{j-i} \]

\(i=n-1\),得 \(b_{n-1} = a_{n-1} + n a_n s\),因此得到 \(b_{n-1},a_{n-1},a_n\) 后可求出 \(s\)

转化为存在 \(n\) 次多项式 \(F\),给定 \(a_i=F(i)\;(0\le i\le n)\),求出 \([x^n]F\)\([x^{n-1}]F\)

考虑拉格朗日插值,显然 \(F=\sum_{i=0}^n a_i \prod_{j\ne i}\frac{x-j}{i-j}\)

\[\begin{aligned} [x^n]F=&[x^n]\sum_{i=0}^n a_i \prod_{j\ne i}\frac{x-j}{i-j}\\ =&\sum_{i=0}^n a_i \prod_{j\ne i}\frac1{i-j}\\ =&\sum_{i=0}^n \frac{a_i}{i!(n-i)!}\\ \end{aligned} \]

\[\begin{aligned} [x^{n-1}]F=&[x^{n-1}]\sum_{i=0}^n a_i \prod_{j\ne i}\frac{x-j}{i-j}\\ =&\sum_{i=0}^n a_i \prod_{j\ne i}\frac1{i-j}\cdot \sum_{j\ne i}(-j)\\ =&\sum_{i=0}^n \frac{a_i}{i!(n-i)!}\left(i-\frac{n(n+1)}2\right)\\ \end{aligned} \]

代码

参考

\(\textcolor{purple}\odot\) CF1817D Toy Machine

\(n\gets n-2\),令 \(m=\frac{n+1}2\)

\(\text{LDRULU}\) 可以把 \(1\sim n\) 重排为 \(2\sim m,m+2\sim n-1,1,m+1,n\),对称地 \(\text{RDLURU}\) 可以把 \(1\sim n\) 重排为 \(1,m-1,n,2\sim m-2,m\sim n-1\)

操作不超过 \(m-1\) 次时,\(\text{LDRULU}\) 相当于把 \(1\sim m\) 不断向前移,每次把第一个移到后面,而后面部分不保证顺序,实际上操作 \(m\) 次后第一个元素为 \(m+1\),因此 \(\text{LDRULU}\) 操作不超过 \(m\) 次后第一个元素为操作次数加一,当 \(k\le m+1\) 时,可以 \(\text{LDRULU}\) 重复 \(k-1\) 次后操作 \(\text L\)

\(k>m+1\) 时,先 \(n-k\)\(\text{RDLURU}\)\(k\) 移到最右边,然后进行 \(m-1\) 次操作 \(\text{RDLD}\),每次会把一个元素放到第二行右边的空缺中,且保持 \(k\) 仍然在第一行最后一个元素,操作过后第二行后一个空缺被填满,第一行剩下 \(m\) 个数,最后一个为 \(k\),再进行 \(m-1\)\(\text{LDRULU}\) 即可把 \(k\) 移到第一个位置,再进行一次 \(\text{L}\) 即可

代码

参考

\(\textcolor{purple}\odot\) CF1815D XOR Counting

\(m=1\) 时显然只能表示出 \(n\)

\(m\ge 3\) 时,能且仅能表示出 \([0,n]\) 中与 \(n\) 奇偶性相同的值,设为 \(x\) 则构造 \(x\;\;\frac{n-x}2\;\;\frac{n-x}2\;\;\cdots\),所有这样的 \(x\) 的和是容易计算的

考虑 \(m=2\) 的情况,令 \(S_n=\{x\oplus (n-x)\mid 0\le x\le n\}\),令 \(f_n=\sum_{u\in S_n}u\),令 \(g_n=|S|\),考虑 \(dp\)

\(n\) 为奇数时,设 \(n\) 拆为 \(a+b\),且 \(a\) 为奇数,令 \(A=\frac{a-1}2,B=\frac b2\),则 \(a\oplus b=(A\oplus B)+1,A+B=\frac{n-1}2\),因此 \(f_n=2f_{\frac n2}+g_n\)\(g_n=g_{\frac n2}\)

\(n\) 为偶数时,同理得 \(f_n=2(f_{\frac n2}+f_{\frac n2-1})\)\(g_n=g_{\frac n2}+g_{\frac n2-1}\)

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

代码

参考

\(\textcolor{purple}\odot\) CF1819D Misha and Apples

显然需要令最后一次清空最靠前,得到最后一次清空的位置的最小值 \(f\) 后,若 \((f,n]\) 中存在 \(k_i=0\) 则答案为 \(m\),否则答案为 \(\sum_{i=f+1}^n k_i\)

考虑如何计算 \(f\)

对于所有 \(i\) 计算出 \(mx_i\),表示 \(S_j\)\(S_i\) 有交的 \(j\;(j<i)\) 的最大值,容易 \(O(\sum k_i)\) 求出,注意清空时需要保证复杂度

\(f_i\) 表示只取 \(S_1\sim S_i\),最后一次清空的位置的最小值,显然 \(f\) 单调不降

\(can_i\) 表示 \(S_i\) 能否被清空

\(lse_i\)\(i\) 之前第一个 \(k_j=0\)\(j\)

\[can_0=1\\ f_0=0\\ can_i=[k_i>f_i]\lor [mx_i>f_i]\\ f_i=\max u \mid u\ge \max(f_{i-1},mx_i)\land can_{f_i} \]

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

代码

参考

\(\textcolor{purple}\odot\) CF1814F Communication Towers

线段树分治,转化为集合合并,撤销,标记一个集合

并查集按秩合并,对于每个点,记录一个标记 \(tg_u\)\(u\) 到根的链上的 \(tg\) 之和 \(>0\) 则表示 \(u\) 被标记过,否则没有被标记

标记一个连通块时直接修改代表元的标记即可

集合合并时,设要把 \(u\) 连到 \(v\) 下,则 \(tg_u\gets tg_u-tg_v\),撤销时与之相反

时间复杂度 \(O(m\log^2 n)\)

代码

参考

\(\textcolor{blue}\odot\) CF1814E Chain Chips

显然最优情况下每个置换环占据一个区间

对于一个置换环,最优情况下区间内所有边恰好选择两次

显然每个置换环至少含有一条边(这条边被使用两次)

转化为 \(n-1\) 条边,选择若干条断开,不能同时断开两条相邻的,不能断开第一条和最后一条,最小化剩余边的总和的两倍

容易 \(\text{DDP}\) 做到 \(O(n+q\log n)\)

代码

posted @ 2025-05-30 18:45  Hstry  阅读(2)  评论(0)    收藏  举报