做题记录 25.3.11

\(\textcolor{purple}\odot\) CF2040F Number of Cubes

考虑 \(\operatorname{Burnside}\) 引理

变换群 \(G=\{(x,y,z)\mid 0\le x<a,0\le y<b,0\le z<c\}\),令 \(F(x,y,z)\) 表示在变换 \((x,y,z)\) 作用下不变的立方体数量,则方案数为

\[\frac1{abc}\sum_{(x,y,z)\in G}F(x,y,z) \]

\[T=\operatorname{lcm}\left(\frac a{\gcd(a,x)},\frac b{\gcd(b,y)},\frac c{\gcd(c,z)}\right) \]

\[F(x,y,z)=[\forall d_i,T\mid d_i]\binom{\frac{abc}T}{\frac{d_1}T,\frac{d_2}T,\cdots,\frac{d_k}T} \]

即答案为

\[\frac1{abc}\sum_{(x,y,z)\in G}[\forall d_i,T\mid d_i]\binom{\frac{abc}T}{\frac{d_1}T,\frac{d_2}T,\cdots,\frac{d_k}T}\;\;\; \left\{T=\operatorname{lcm}\left(\frac a{\gcd(a,x)},\frac b{\gcd(b,y)},\frac c{\gcd(c,z)}\right)\right\} \]

直接计算为 \(O(\sum abck)\) 的,考虑优化

\(f(u,a)=\sum_{0\le x<a}\left[\frac a{\gcd(x,a)}=u\right]\),则上式等于

\[\def \T{\operatorname{lcm}(u,v,w)} \frac 1{abc}\sum_{u\mid a}\sum_{v\mid b}\sum_{w\mid c}[\forall d_i,\T\mid d_i]\binom{\frac{abc}\T}{\frac{d_1}\T,\frac{d_2}\T,\cdots,\frac{d_k}\T}f(u,a)f(v,b)f(w,c) \]

\[\begin{aligned} f(u,a)=&\sum_{0\le x<a}\left[\frac a{\gcd(x,a)}=u\right]\\ =&\sum_{0\le x<a}\left[\gcd(x,a)=\frac au\right]\\ =&\sum_{0\le x<a}\left[\gcd\left(\frac ua\cdot x,u\right)=1\right]\\ =&\varphi(u)\\ \end{aligned} \]

因此总方案数数为

\[\def \T{\operatorname{lcm}(u,v,w)} \frac 1{abc}\sum_{u\mid a}\sum_{v\mid b}\sum_{w\mid c}[\forall d_i,\T\mid d_i]\binom{\frac{abc}\T}{\frac{d_1}\T,\frac{d_2}\T,\cdots,\frac{d_k}\T}\varphi(u)\varphi(v)\varphi(w) \]

时间复杂度 \(O(V+\sum (\sigma(\gcd d_i)k+\sigma(a)\sigma(b)\sigma(c)\log V))\),其中 \(V=3\times 10^6\) 为预处理 \(\varphi\) 和阶乘、阶乘逆元的时间复杂度,\(\sigma(x)\) 表示 \(x\) 的因子个数

由于 \(\sigma(\gcd d_i)k\le k\gcd d_i\le k\min d_i\le \sum d_i=abc\)\(\sigma(a)\sigma(b)\sigma(c)\le O(\sqrt a\sqrt b\sqrt c)=O(\sqrt{abc})\),因此时间复杂度的上界为 \(O(V+\sum(abc+\sqrt{abc}\log V))\),约 \(3\times10^8\) 次,可过

代码

参考

\(\textcolor{purple}\odot\) CF2038M Royal Flush

\(J,Q,K,A\) 分别为 \(11~14\)

\(2\sim 9\) 本质相同,因此令 \(dp_{i,a}\) 表示牌堆中剩余数量为 \(i\),当前手中排的状态为 \(a\),该状态到结束的期望步数,其中 \(a\) 为一个长度不超过 \(n\) 的单调递减数组,每个位置代表一个没有丢弃过该花色中的 \(10\sim 14\)的花色,值为该花色中当前持有且在 \(10\sim 14\) 的牌数

则答案为 \(dp_{13n,\{0,\cdots\}}\)(其中后面的数组长为 \(n\)

对于状态 \(dp_{i,a}\),若 \(i\le 0\)\(a_0=5\),则值为 \(-1\)(因为要抵消前一次操作)

否则枚举 \(a\) 的非空子集 \(s\),表示决策为弃置这个子集之外手中的 \(10\sim 14\)(显然最优策略下一种花色不会弃置一部分剩余一部分)

枚举摸到的 \(10\sim 14\) 的可能组合,分别计算出步数后加权求和,即为当前决策下的期望步数

\(dp\) 值为各种决策的期望步数的最小值

状态数不超过 \(13n\times 7^n\)(实际上远远不到),单次转移不超过 \(O(2^n5^4)\),若用 unordered_map,时间复杂度的宽松上界为 \(O(13n\times5^4\times 14^n)\),用 map 也可过

代码

参考

\(\textcolor{green}\odot\) CF2038I Polyathlon

对于一个 \(x\),考虑如何比较 \(i\)\(j\) 谁先被淘汰

发现这相当于比较两者的字典序,字典序小的先淘汰

考虑类似 \(\operatorname{LSD}\) 基排的方式

每行都复制一遍放在末尾,然后从右往左扫描,每一列进行一次稳定的排序,最大的下标即为胜者

时间复杂度 \(O(mn\log n)\),容易优化到 \(O(mn)\)

代码

参考

\(\textcolor{purple}\odot\) CF2038F Alternative Platforms

\(rs_k\) 表示答案,令 \(U=\{1,2,\cdots,n\}\),则

\[\begin{aligned} rs_k=&\sum_{S\subseteq U,|S|=k}\max\left(\min_{x\in S}a_x,\min_{x\in S}b_x\right)\\ =&\sum_{S\subseteq U,|S|=k}\min_{x\in S}a_x+\min_{x\in S}b_x-\min\left(\min_{x\in S}a_x,\min_{x\in S}b_x\right)\\ =&\sum_{S\subseteq U,|S|=k}\min_{x\in S}a_x+\sum_{S\subseteq U,|S|=k}\min_{x\in S}b_x-\sum_{S\subseteq U,|S|=k}\min_{x\in S}\min(a_x,b_x)\\ \end{aligned} \]

\(c_x=\min(a_x,b_x)\),则拆为三个子问题:对于 \(s\in\{a,b,c\}\) 分别求出 \(t_k=\sum_{S\subseteq U,|S|=k}\min_{x\in S}s_x\)

\(s\) 从小到大排序,则

\[t_k=\sum_{i=1}^n s_i\binom{n-i}{k-1} \]

整理得

\[(n-k)!t_{n-k+1}=\sum_{i=1}^n s_i(n-i)!\cdot\frac{1}{(k-i)!} \]

使用 \(\operatorname{NTT}\) 即可做到 \(O(n\log n)\)

三次 \(\operatorname{NTT}\) 可合并为一次以减小常数

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

代码

参考

\(\textcolor{purple}\odot\) CF2038D Divide OR Conquer

\(dp_{i,j}\) 表示 \(1\sim i\) 中最后一段的按位或和为 \(j\) 的方案数,则 \(dp_{0,0}=1\),答案为 \(\sum_j dp_{n,j}\),转移为

\[dp_{i,j}=\sum_{0\le k<i}\sum_{t\le j} [\operatorname{or}_{x=k+1}^i a_x=j]dp_{k,t} \]

对于每个 \(i\),集合 \(\{1,2,\cdots,i\}\) 可根据 \(f(k)=\operatorname{or}_{x=k+1}^i a_x\) 划分为 \(\log_2(V)+O(1)\) 个等价类,每个等价类 \(S:k\)\(\forall x\in S,f(x)=k\))转移为 \(\forall u\in S,dp_{u-1,0\sim k}\to dp_{i,k}\)

即矩阵的形式,共 \(O(n\log V)\) 个转移

将转移拆为两个 \(dp_{0\sim x,0\sim y}\) 相减的形式,离散化 \(O(n\log V)\) 个横坐标后扫描线即可

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

代码

\(\textcolor{blue}\odot\) CF2035E Monster

显然最优情况是一个前缀为 \(k\) 次操作一和一次操作二的循环,剩余部分全为操作二

设操作一次数为 \(d\),则最小金币数为

\[\def\fl{\left\lfloor}\def\fr{\right\rfloor} \def\cl{\left\lceil}\def\cr{\right\rceil} f(d)=dx+\left(\fl\frac{d}{k}\fr+\cl\frac{z-\frac{1}{2}k\fl\frac dk\fr(1+\fl\frac dk\fr)}{d}\cr\right)y \]

转化为求该函数在 \([1,z]\) 内的最小值(实际上当 \(\def\fl{\left\lfloor}\def\fr{\right\rfloor} \def\cl{\left\lceil}\def\cr{\right\rceil}z-\frac{1}{2}k\fl\frac dk\fr(1+\fl\frac dk\fr)<0\) 时未定义,但是最优解一定不在该范围内,因此不用考虑)

模拟退火后在得到的最优点附近一段区间内枚举取 \(\min\) 即可

由于该函数宏观上为先下降再上升,因此一开始可以用三分加速

代码

参考

\(\textcolor{blue}\odot\) CF2035F Tree Operations

若在 \(m\) 次内可以完成,则在 \(m+2n\) 次内也可以完成,只要每个点翻转两次即可

因此设最终方案数为 \(T=2nk+r\),则枚举 \(0\le r<2n\),对 \(k\ge 0\) 二分

转化为 \(O(n\log V)\) 次判定能否在给定步数内完成

设二分的步数为 \(S\),令 \(op_i=\lfloor\frac Sn\rfloor+[i\le S\bmod n]\) 表示节点 \(i\) 被操作的次数

在树上 \(dp\),令 \(dp_u\) 表示 \(u\) 所在子树中全变成 \(0\) 还需要的最少翻转次数

初始 \(dp_u\gets a_u\)

然后从叶子向上,考虑一个 \(dp_u\) 对其父亲的贡献

\(dp_u>op_u\),则 \(u\) 内还需要 \(dp_u-op_u\) 次,只能在操作其祖先时处理,因此 \(dp_{fa_u}\) 加上 \(dp_u-op_u\)

否则子树内多余了 \(op_u-dp_u\) 次,可以两两抵消,剩余 \((op_u-dp_u)\bmod 2\) 次由其祖先抵消,\(dp_{fa_u}\) 加上 \((op_u-dp_u)\bmod 2\)

最终若 \(dp_0\ge 1\)(假定 \(fa_1=0\)),则说明 \(opt\) 次操作无法使整棵树清空,即 \(opt\) 不合法,否则 \(opt\) 合法

总时间复杂度 \(O(n^2\log V)\),可把判断的过程写为非递归式以减小常数

代码

参考

\(\textcolor{purple}\odot\) CF2034F2 Khayyam's Royal Decree (Hard Version)

转化为一个 \(n\times m\) 的平面,从 \((0,0)\)\((n,m)\),若在 \((x,y)\) 则向右(\(x\) 坐标加一)和向上的概率之比为 \((n-x):(m-y)\),保存一个值初始为 \(0\),若向右则加上 \(2\),若向上则加上 \(1\),若经过关键点则乘以 \(2\),求最终期望权值

假设当前在 \((x,y)\),所有从 \((x,y)\)\((n,m)\) 的路径中,接下来一步向右和向上的比例同样为 \((n-x):(m-y)\),即每条路径的概率相同

因此算出所有路径的总权值和后除以 \(\binom{n+m}n\) 即可

对于一条路径,设其经过关键点编号分别为 \(p_0\sim p_{t+1}\),其中 \(p_0=0\)\((0,0)\)\(p_{t+1}=k+1\)\((n,m)\)

则其权值为

\[\begin{aligned} &\sum_{i=1}^{t+1} 2^{t-i+1}((2r_{p_i}+b_{p_i})-(2r_{p_{i-1}}+b_{p_{i-1}}))\\ =&\sum_{i=1}^{t+1} 2^{t-i+1}(2r_{p_i}+b_{p_i})-\sum_{i=0}^t2^{t-i}(2r_{p_i}+b_{p_i})\\ =&\sum_{i=1}^t (2^{t-i+1}(2r_{p_i}+b_{p_i})-2^{t-i}(2r_{p_i}+b_{p_i}))-2^t(2r_0+b_0)+(2r_{t+1}+b_{t+1})\\ =&\sum_{i=1}^t 2^{t-i}(2r_{p_i}+b_{p_i})+(2n+m)\\ \end{aligned} \]

之后仅计算前面一部分的和,最终答案加上 \(2n+m\) 即可(除以 \(\binom{n+m}n\) 之后)

考虑对于每个关键点求出其贡献

\(P_i=2r_i+b_i\) 为关键点 \(i\) 的权值,则要求的部分为

\[\sum_{i=1}^t 2^{t-i}P_{p_i} \]

前面的系数 \(2^{t-i}\) 相当于路径上 \(p_i\) 之后的点可选可不选

\(f_i\) 表示第 \(i\) 个关键点到 \((n,m)\) 的路径总数,其中含有 \(x\) 个点的被计入了 \(2^{x-1}\)

\(Cp(n,m)=\binom{n+m}n\) 表示 \((0,0)\)\((n,m)\) 的路径数

则答案为 \(\sum_{i=1}^k P_i Cp(r_i,b_i)f_i\)

\(f\) 的转移为

\[f_i=Cp(n-r_i,m-b_i)+\sum_{j}[r_i\le r_j][b_i\le b_j]f_jCp(r_j-r_i,b_j-b_i) \]

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

代码

参考

posted @ 2025-03-12 06:46  Hstry  阅读(9)  评论(0)    收藏  举报