做题记录 25.4.6

\(\textcolor{blue}\odot\) CF1943C Tree Compass

找出直径,设直径为 \(p_1,p_2,\cdots,p_t\)

\(2\nmid t\),则以 \(p_{\frac{t+1}2}\) 为中心,以 \(0\sim\frac{t-1}2\) 为半径染色即可,用 \(\frac{t+1}2\) 次操作

否则设 \(x=p_{\frac t2},y=p_{\frac t2+1}\),若 \(4\mid t\) 则以 \(x,y\) 为中心,\(1,3,\cdots,\frac t2-1\) 为半径染色,用 \(\frac t2\) 次操作,否则以 \(x,y\) 为中心,\(1,3,\cdots,\frac t2\) 为半径染色,用 \(\frac t2+1\) 次操作

显然该构造取到下界且能染整棵树

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

代码

参考

\(\textcolor{blue}\odot\) CF1943D1 Counting Is Fun (Easy Version)

序列合法当且仅当对于任意 \(i\),有 \(a_{i-1}+a_{i+1}\ge a_i\),其中 \(a_0=a_{n+1}=0\)

\(f_{i,j,k}\) 表示 \(1\sim i\) 中,\(a_{i-1}=j,a_i=k\) 的方案数,前缀和优化转移即可

时间复杂度 \(O(\sum nk^2)\)

代码

\(\textcolor{purple}\odot\) CF1943D2 Counting Is Fun (Hard Version)

发现 \(\text{Easy Version}\)\(dp\) 难以继续优化,考虑使用容斥

\(f_{i,v}\) 表示 \(1\sim i\)\(a_i=v\) 的合法方案数

定义位置 \(i\) 合法当且仅当 \(a_i\le a_{i-1}+a_{i+1}\)

不考虑 \(i-1\) 的合法性的情况下,转移为

\[f_{i,v}=\sum_{x=0}^k f_{i-1,x} \]

然后需要减去 \(i-1\) 不合法的方案数,显然数量为 \(\sum_{x=0}^k f_{i-2}\max(0,k-x-v)\)\(a_{i-2}=x,a_i=v\) 时,\(x+v<a_{i-1}\le k\),共 \(\max(0,k-x-v)\) 种选择)

因此

\[f_{i,v}=\sum_{x=0}^k f_{i-1,x}-\sum_{x=0}^k f_{i-2}\max(0,k-x-v) \]

拆为

\[f_{i,v}=\sum_{x=0}^k f_{i-1,x}-\sum_{x=0}^{k-v} f_{i-2}(k-x)+v\sum_{x=0}^{k-v} f_{i-2} \]

预处理后容易做到 \(O(nk)\)

代码

参考

\(\textcolor{purple}\odot\) CF1942F Farmer John's Favorite Function

显然将 \(f(i)\) 定义为 \(\left\lfloor \sqrt{f(i-1)+a_i}\right\rfloor\) 答案不变

离线,扫描线,转化为 \(O(q)\) 次区间加和区间 \(\text{sqrt}\) 下取整,势能线段树即可

时间复杂度 \(O(q\log q\log\log V)\)

代码

参考

\(\textcolor{purple}\odot\) CF1942G Bessie and Cards

可抽象为以下问题:有一个长为 \(a+b+c+5\)\(-1/0/1\) 序列 \(v\),其中 \(-1\)\(a+5\) 个,\(0\)\(b\) 个,\(1\)\(c\) 个,其中有 \(5\)\(-1\) 是特殊的。有二元组 \((x,y)\),初始 \((x,y)\gets (0,5)\),每次若 \(y+v_{x+1}>0\) 则令 \(y\gets y+v_{x+1}\)\(x\gets x+1\),否则结束,若结束时 \(x\) 不小于最大的特殊 \(-1\) 的下标则这个序列合法,求一个序列合法的概率

发现将 \(b\) 设为 \(0\) 不会改变概率

枚举 \(y\) 第一次为 \(0\) 的时候 \(x\) 的值,显然 \(v_{1\sim x}\)\(1\)\(\frac{x-5}2\) 个,\(-1\)\(\frac{x+5}2\) 个(必须满足 \(5\le x\le a+c+5\)\(x\) 为奇数)

考虑计算出不合法的数量 \(r\),则合法的概率为 \(1-\frac r{\binom{a+c+5}{a,c,5}}\)

\(c'=\frac{x-5}2,a'=\frac{x+5}2\)\(n=a+c+5\),若 \(c'>c\)\(a'>a\) 则这个 \(x\)\(r\) 无贡献

长为 \(x+5\)、总和为 \(0\)、任意非空真前缀和 \(>0\)、前 \(5\) 个位置为 \(1\)\(-1/1\) 序列数量 相当于 从 \((5,0)\) 出发,不穿越 \(y=x-1\),到达 \((a',a'-1)\) 的不降路径数,可反射容斥求出路径数为 \(\binom{x-1}{a'-1}-\binom{x-1}{a'}\)

因此为 \(v_{1\sim x}\) 分配 \(-1/1\) 的方案数为 \(\binom{x-1}{a'-1}-\binom{x-1}{a'}\)

\(v_{x+1\sim n}\) 分配 \(-1/1\) 的方案数为 \(\binom{n-x}{a+5-a'}\)

\(a+5\)\(-1\) 中选出 \(5\) 个特殊的 \(-1\),且 \(5\)\(-1\) 不完全在 \(v_{1\sim x}\) 中的方案数为 \(\binom{a+5}{5}-\binom{a'}{5}\)

因此这个 \(x\)\(r\) 的贡献为

\[\left(\binom{x-1}{a'-1}-\binom{x-1}{a'}\right)\binom{n-x}{a+5-a'}\left(\binom{a+5}{5}-\binom{a'}{5}\right) \]

时间复杂度 \(O(\sum (a+c))\)

代码

参考

\(\textcolor{blue}\odot\) CF1942E Farm Game

只考虑 \(2n\) 个位置中第一个为先手的情况,最终答案乘以 \(2\) 即可

\(2n\) 组两两配对(\(a_1\)\(b_1\)\(a_2\)\(b_2\),以此类推),结论为:局面先手必胜当且仅当存在至少一对的距离为偶数(距离定义为两个位置相减)

证明:

  • 每一对距离都是 \(1\) 时,要么先手无法移动,要么先手移动后后手选择相同的子集以相同的方向移动,这样最终一定会贴到边缘从而先手无法操作,因此此时后手必胜
  • 当每一对距离都是奇数时,先手若向中间移动(即选出的每一对距离都减少),则后手可以选择相同的子集同样向中间移动,仍然保持每一对距离都是奇数,先手若向边上移动,则后手选择相同的子集和相同的方向移动,同样保持距离为奇数,且若干次操作后无法继续向边缘移动,即此时后手必胜
  • 当存在一个子集距离为偶数时,先手可以选择这个子集向中间移动一步,从而后手必败,先手必胜

\(S(s,c)=\binom{s+c-1}{c-1}\) 表示将 \(s\) 划分为 \(c\) 个自然数之和的方案数,则答案为 \(\sum_{2\mid i} S(\frac i2,n)S(l-2n-i,n+1)\)

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

代码

参考

\(\textcolor{blue}\odot\) CF1936C Pokémon Arena

建图,\(n\) 个点分别表示第 \(1\sim n\) 只在场上的情况,记为点 \(p(1\sim n)\)\(i\)\(j\)\(\max(0,\min_{x=1}^m (a_{j,x}-a_{i,x}))+c_j\) 的边

这样总边数为 \(O(n^2)\) 的,总时间复杂度 \(O(n^2m+n^2\log n)\),无法通过

考虑额外建立 \(n\times m\) 个点,点 \(t(i,j)\) 表示第 \(i\) 只的第 \(j\) 个属性

\(t(i,j)\)\(p(i)\) 连边权为 \(c_i\) 的边,\(p(i)\)\(t(i,j)\) 连边权为 \(0\) 的边

对于每个 \(1\le j\le m\),将 \(1\sim n\)\(a_{\ast,j}\) 从小到大排序,设排序结果为 \(s_{1\sim n}\),则 \(t(s_{i+1},j)\)\(t(s_i,j)\) 连边权 \(a_{s_{i+1},j}-a_{s_i,j}\) 的边,\(t(s_i,j)\)\(t(s_{i+1},j)\) 连边权 \(0\) 的边

答案为 \(p(1)\)\(p(n)\) 的最短路

时间复杂度 \(O(nm\log nm)\)

代码

参考

\(\textcolor{blue}\odot\) CF1935E Distance Learning Courses in MAC

显然一定存在一种最优解,使得每个 \([x_i,y_i]\;(l\le i\le r)\) 中取 \(y_i\),或 \(y_i\) 某一二进制位置 \(0\) 且之后的二进制位置 \(1\) 的结果

定义 \(y_i\) 的一个二进制位可移除当且仅当 \(y_i\) 这一位为 \(1\),且这一位置 \(0\) 后续位置 \(1\) 后不小于 \(x_i\)

对于一组询问 \([l,r]\),令 \(f_i\) 表示区间中 \(y\) 的第 \(i\) 位为 \(1\) 的数量,\(g_i\) 表示区间中 \(y\) 的第 \(i\) 位可移除的数量,两者容易预处理后差分得到

\(f_i>0\),则答案的第 \(i\) 位可取 \(1\),若 \(f_i>1\)\(g_i>0\),则答案第 \(i\) 位取 \(i\) 的情况下之后的所有位都可取 \(1\)

时间复杂度 \(O(n\log V+q\log V)\)

代码

参考

posted @ 2025-04-08 09:50  Hstry  阅读(11)  评论(0)    收藏  举报