做题记录 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)\) 作用下不变的立方体数量,则方案数为
令
则
即答案为
直接计算为 \(O(\sum abck)\) 的,考虑优化
令 \(f(u,a)=\sum_{0\le x<a}\left[\frac a{\gcd(x,a)}=u\right]\),则上式等于
而
因此总方案数数为
时间复杂度 \(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\}\),则
令 \(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\) 从小到大排序,则
整理得
使用 \(\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}\),转移为
对于每个 \(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\),则最小金币数为
转化为求该函数在 \([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)\)
则其权值为
之后仅计算前面一部分的和,最终答案加上 \(2n+m\) 即可(除以 \(\binom{n+m}n\) 之后)
考虑对于每个关键点求出其贡献
令 \(P_i=2r_i+b_i\) 为关键点 \(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\) 的转移为
时间复杂度 \(O(k^2+n+m)\)

浙公网安备 33010602011771号