做题记录 25.5.5
\(\textcolor{purple}\odot\) CF1866M Mighty Rock Tower
令 \(f_i\) 为 \(i-1\) 变为 \(i\) 的期望步数,令 \(P_x=\frac{p_x}{100}\),转移显然为
化简得
发现 \(P_x\) 只有 \(100\) 种,因此令 \(s_{x,p}=\sum_{i=0}^{x-2}f_{i+1}(\frac{p}{100})^{-i}\),在计算 \(f\) 的同时递推维护 \(s\) 即可
时间复杂度 \(O(nw)\),其中 \(w=100\)
\(\textcolor{purple}\odot\) CF1866L Lihmuf Balling
令 \(M(x)=(x-1)\bmod n+1\)
对于一个 \(k\),其总球数为
前一个条件等价于 \(i\le \frac n{\gcd(n,k)}\),后一个条件等价于 \(M(ik)>i\)
因此总球数为
当 \(i\) 为一个区间时 \((ik-(v-1)n)\) 为等差数列,因此对于一个 \(v\) 可以 \(O(1)\) 求出后面的和式
总时间复杂度 \(O(\sum_{k=1}^m \frac k{\gcd(k,n)})=O(m^2)\)
\(\textcolor{purple}\odot\) CF1866K Keen Tree Calculation
特判询问的结点为叶子的情况,非叶子则挂到对应结点上,转化为对于每个点,存在若干 \((k,d)\),对于该点上的每个询问 \(x\) 需要找出 \(kx+d\) 的最大值和次大值
先李超树求出最大值的二元组下标,则次大值就是在剩余的前缀和后缀中的最大值,然后从前往后和从后往前分别扫描一遍即可
时间复杂度 \(O(n\log V)\),实现精细可以到 \(O(n\log n)\),若用求凸包的做法则可以到 \(O(n)\)
\(\textcolor{purple}\odot\) CF1867F Most Different Tree
定义一棵树出现过当且仅当存在树 \(G\) 的一个子树与之同构
定义一棵树被另一棵树包含当且仅当后者某一子树等于前者
若一棵树没有出现过,则所有包含它的树都没有出现过
考虑找到一棵最小的没有出现过的树,编号后将剩余的点依次作为它的祖先(即它们连成一条链,链底为这棵数的根),显然这样最优
特判 \(n=2\) 的情况
暴力找出前 \(n+1\) 小的本质不同的无标号有根树,这一步暴力搜索即可
总时间复杂度 \(O(nf^{-1}(n))\),其中 \(f(x)\) 表示 \(x\) 个点的无标号有根树数量
\(\textcolor{purple}\odot\) CF1866J Jackets and Packets
先把极大同色连续段缩起来,设缩为 \(m\) 段,第 \(i\) 段值为 \(a_i\),长度为 \(ln_i\)
令 \(dp_{l,r}\) 表示删除 \(l\sim r\) 段的最小代价
一种可能是 \(dp_{l,r}\gets x+dp_{l+1,r}\)
另一种可能是选择 \(p_{1\sim t}\) 满足
- \(l=p_1<p_2<\cdots <p_t\le r\)
- \(a_{p_1}=a_{p_2}=\cdots=a_{p_t}=a_l\)
把第 \(p_1\) 段移到第二个栈中,消除 \((p_1,p_2)\),把第 \(p_2\) 段移到第二个栈中,消除 \((p_2,p_3)\),以此类推,消除 \((p_{t-1},p_t)\),最后 \(p_t\) 有两种选择,移到第二个栈中,或把前面 \(t-1\) 段都移回来
前者代价为 \(y\sum_{i=1}^t ln_{p_i}+\sum_{i=2}^t dp_{p_{i-1}+1,p_i-1}+x\),后者代价为 \(2y\sum_{i=1}^{t-1}+\sum_{i=2}^t dp_{p_{i-1}+1,p_i-1}+x\)
令 \(one_{l,r}\) 为在区间中选择若干位置 \(p_{1\sim t}\),\(l,r\) 必选,\(y\sum_{i=1}^t ln_{p_i}+\sum_{i=2}^t dp_{p_{i-1}+1,p_i-1}\) 的最小值,若 \(a_l\ne a_r\) 则值为 \(\infty\)
令 \(two_{l,r}\) 为在区间中选择若干位置 \(p_{1\sim t}\),\(l,r\) 必选,\(2y\sum_{i=1}^t ln_{p_i}+\sum_{i=2}^t dp_{p_{i-1}+1,p_i-1}\) 的最小值,若 \(a_l\ne a_r\) 则值为 \(\infty\)
则 \(dp\) 的第二种转移为
显然最优情况下只有这两类操作
\(one\) 和 \(two\) 的转移、\(dp\) 的边界情况是容易的
时间复杂度 \(O(n^3)\)
\(\textcolor{blue}\odot\) CF1866I Imagination Castle
暴力 \(dp\) 为令 \(f_{i,j}\) 表示 \((i,j)\) 处是否先手必胜,则对于特殊点 \((x,y)\) 令 \(f_{x,y}=0\),且 \(f_{n,m}=0\),转移为 $f_{i,j}=(\lor_{k=i+1}^n \lnot f_{k,j})\lor (\lor_{k=j+1}^m \lnot f_{i,k}) $,要求出 \(f_{1,1}\)
若第一行存在特殊点显然 \(f_{1,1}=1\)
显然 \(f\) 一行和一列中至多只有一个 \(0\)(除非有多个特殊点)
从第 \(n\) 行向前扫描,令 \(ls\) 为目前为止最后一个 非特殊点且 \(f\) 值为 \(0\) 的 列,令 \(md_i\) 表示当前行及之后的行中除特殊点外第 \(i\) 列的 \(f\) 是否必然为 \(1\),初始 \(ls=m,md_i=0\)
显然 \(ls\) 是不增的(忽略不存在 \(ls\) 的行),否则设当前的 \(ls\) 为 \(x\),则它之前第一次 \(ls\) 小于 \(x\) 时,将那时的 \(ls\) 换为 \(x\) 一定更优且合法
到新的一行时,设当前行中特殊点位置分别在 \(p_{1\sim t}\)
减少 \(ls\) 直到 \(md_{ls}=0\),因为 \(md_{ls}=1\) 时当前位置的 \(f\) 一定为 \(1\)
若此时 \(ls=0\),则之后的 \(f\) 除了特殊点外都是 \(1\),可直接得出 \(f_{1,1}=1\)
否则对于所有 \(p_i\),令 \(md_{p_i}\gets 1\)
若 \(\max p_t\ge ls\),则当前行中 \(ls\) 及其左侧的 \(f\) 必然都是 \(1\),否则 \(ls\) 位置的 \(f=0\),令 \(md_{ls}\gets 0\)
若最终 \(ls=1\) 则 \(f_{1,1}=0\),否则 \(f_{1,1}=1\)
时间复杂度 \(O(n+m+k)\)
\(\textcolor{purple}\odot\) CF1866E Elevators of Tamem
令 \(dp_{i,j,k}\) 表示三者分别到达第 \(i,j,k\) 个询问的位置时的最小代价
从 \(dp_{i,j,k}\) 转移到 \(dp_{l,j,k}\) 时,移动的单价要按 \([i,l]\) 内第一部的最小单价计算,若不可用则单价为 \(\infty\),其他转移同理
时间复杂度 \(O(q^3)\)

浙公网安备 33010602011771号