做题记录 25.4.3
\(\textcolor{purple}\odot\) CF1957E Carousel of Combinations
即求出
\(i^{\underline j}\) 为连续 \(j\) 个整数相乘,其中恰好一个(为 \(\lfloor\frac ij\rfloor j\))为 \(j\) 的倍数,与分母中的 \(j\) 相抵消剩余 \(\lfloor\frac ij\rfloor\),其余 \(j-1\) 个在 \(\bmod j\) 下余数取遍 \(1\sim j-1\),乘起来为 \((j-1)!\),因此
由于
可得
记其为 \(f(i,j)\)
令 \(N=10^6\)
从 \(1\) 到 \(N\) 枚举 \(j\),维护列表 \(a_{1\sim n}\),每次令 \(a_i\) 加上 \(f(i,j)\),最终 \(a_i\) 保存了 \(\sum_{j=1}^i f(i,j)\)(显然 \(f(i,j)=0\;\text{if}~i<j\)),对 \(a\) 做一次前缀和后 \(a_i\) 保存了 \(n=i\) 时的答案
对于 \(j\ne 4\),只有 \(j\in\mathbb P\) 时才存在 \(f(i,j)\ne 0\),此时需要令 \(a_i\gets a_i+j-\left(\left\lfloor\frac ij\right\rfloor\bmod j\right)\),发现 \(j-\left(\left\lfloor\frac ij\right\rfloor\bmod j\right)\) 的取值分为 \(O(\frac Ni)\) 段,每段连续,因此转化为总计 \(O(N\ln N)\) 个区间加,差分即可(因此最终对 \(a\) 进行两次前缀和)
预处理后可 \(O(1)\) 回答询问
时间复杂度 \(O(N\ln N+q)\)
\(\textcolor{purple}\odot\) CF1956E2 Nene vs. Monsters (Hard Version)
对于连续的五个(环上连续)位置,若第一个位置值为 \(0\),之后四个分别为 \(x,y,z,w\),\(x>0\)
接下来进行 \(T\) 次操作
令 \(t=\min(T,\lfloor\frac xy\rfloor)\),则在接下来 \(t\) 轮中 \(y\) 都会减少 \(x\),此时的 \(z'=\max(0,z-ty+\binom t2 x)\)
令 \(u=\begin{cases}t&\text{if}~z'>0\\u=\max\{t\mid z-ty+\binom t2 x>0\}&\text{if}~z'=0\end{cases}\),则 \(w'=\max(0,w-uz+\binom u2y-\binom u3 x)\)
因为 \(u\le T\),在 \(T\) 次操作后 \(w'\le\max(0,w-Tz+\binom T2y-\binom T3 x)\)
当 \(T>O(\sqrt[3]{\max(x,y,z,w)})\) 时,必然有 \(w'=0\) 或 \(z'=0\)
因此经过 \(O(\sqrt[3]V)\) 轮操作(实际上取 \(2\sqrt[3]V+O(1)\) 轮即可)后,连续正整数段的长度都不超过 \(3\)
特殊处理与 \(1\) 相连的一段,之后每段之间互相独立,可套用之前的式子求出最终值
时间复杂度 \(O(\sum n\sqrt[3]V)\)
\(\textcolor{blue}\odot\) CF1955H The Most Reckless Defense
令 \(v_{i,j,r}\) 表示圆心在 \((i,j)\),半径为 \(r\) 的范围内路径上的整点数
则 \((x,y)\) 处属性为 \(p\) 的塔半径取 \(r\),对敌人产生的总体杀伤力为 \(pv_{x,y,r}-3^r\),题目所求的 \(h\) 的最大值即为所有塔的总体杀伤力之和的最大值
由于 \(pv_{x,y,r}-3^r\le500\pi r^2-3^r\),当 \(r>12\) 时总体杀伤力一定 \(<0\),显然不优
建立二分图,每个左部点对应一个塔,每个右部点对应一种半径,连边容量为 \(1\),费用为对应的总体杀伤力
答案为最大权匹配
若用网络流则时间复杂度 \(O(k^2r^2)\),其中 \(r=12\),若使用 \(\text{KM}\) 算法则时间复杂度 \(O(k^3)\)
\(\textcolor{purple}\odot\) CF1951F Inversion Composition
令 \(s=p^{-1}\),则
令一组 \((i,j)\;(i<j)\) 对上式的贡献为 \(w(i,j)\),则讨论可得
先算出 \(\text{inv}(s)=\text{inv}(p)\),从 \(k\) 中减去,则修改 \(w(i,j)\) 为
此时若 \(k<0\) 或 \(2\nmid k\) 则必然无解
再令 \(k\gets \frac k2\),则问题转化为构造一个排列 \(q\),使得
考虑令 \(q\) 的一段前缀递减,一段后缀递增,两段的值域不交,两者间插入一个数用于补足剩余的数量
初始令 \(q_1\gets 1\),然后从 \(2\) 到 \(n\) 依次扫描,设当前扫描到 \(i\),树状数组计算出 \(cnt=\sum_{1\le j<i}[s_j<s_i]\)
若 \(k\ge cnt\) 则令 \(k\gets k-cnt\),并令 \(q_i=q_{i-1}-1\),令 \(q_{1\sim i}\) 整体加一(可以通过记录偏移量 \(O(1)\) 实现)
否则 \(i\) 位置为前后缀之间的交界处
若 \(k=0\) 则 \(\forall i\le j\le n,q_j\gets j\)
否则令 \(q_i\) 为 \(1\sim j-1\) 中第 \(k\) 个满足 \(s_j<s_i\) 的 \(q_j\),并令这段前缀的 \(q_j\) 加一,对于剩余后缀令 \(\forall i< j\le n,q_j\gets j\)
最终若 \(k\) 还有剩余则无解,否则得到一组可行解
时间复杂度 \(O(\sum n\log n)\)

浙公网安备 33010602011771号