Atcoder试题乱做 Part8
我喜欢这样跟着你,随便你带我到哪里.
\(\text{[ABC231H]Minimum Coloring}\)
\(\color{green}{\text{[EASY]}}\)
显然的行列二分图模型, 一个可以染色的格子对应一个权值为 \(c_i\) 的边, 求最小带权最大匹配.
至于没匹配的点, 一定是选它的连边中权值最小的, 所以对于每个点我们令其相连的边最小值为 \(v_i\) , 对于一个格子 \((a_i,b_i,c_i)\) , 连一条 \(a\) 到 \(b\) 流量为 \(1\) , 权值为 \(v_a+v_b-c_i\) 的边, 跑最大费用可行流即可, 答案即为 \(\sum{v_i}-ans\) .
\(\text{[ABC227H]Eat Them All}\)
\(\color{green}{\text{[EASY]}}\)
注意到一个点入度出度之和为 \(2a_{i,j}\) , 根据这个为限制可以列出一个 \(12\) 元 \(1\) 次方程, 总共有 \(9\) 条限制, 所以存在 \(4\) 个自由元, 暴力枚举每个自由元, 枚举的时候加点剪枝, 同时保证建出来的图连通, 每个元 \(x_i\) 直接拆成 \(x_i\) 条边跑欧拉回路即可.
时间复杂度 \(\mathcal{O}(200^4n)\) .
\(\text{[ABC229H]Advance or Eat}\)
\(\color{red}{\text{[HARD]}}\)
每列是独立的, 则一个列的状态可以有 \(3^n\) 种, 它们连成一个 \(DAG\) , 问题变成有一个 \(DAG\) , 每条边为白色或者黑色, 分别对应只有先手能这样走和只有后手能这样走, 总共有 \(n\) 个棋子, 两人轮流移动棋子, 不能移动的人输.
这是经典的不公平博弈, 超现实数解决, 我们只需要证明 \(DAG\) 上的每个点的数值都不会是未定义即可.
我们证明评估价值可以通过 \(DAG\) 的拓扑序中的归纳法来定义, 假设我们现在关注的是点 \(v\) , 而且拓扑序在它之前的所有点都有定义, 那么只需证明如果存在一条白边 \(v\rightarrow a\) 和一条黑边 \(v\rightarrow b\) , 那么 \(eval_a<eval_b\) , 其中 \(eval\) 表示评估价值.
如果 \(v\rightarrow a\) 和 \(v\rightarrow b\) 都表示吃掉一个棋子, 那么我们令 \(c\) 为这两个棋子都被吃掉的状态, 那么存在黑边 \(a\rightarrow c\) 和白边 \(b\rightarrow c\) , 根据归纳假设 \(eval(a)<eval(c)<eval(b)\) .
同样的, 如果两个操作相互不干扰, 那么都存在上述这种 \(c\) , 可以用类似方法论证, 唯一例外是 \(v\rightarrow a\) 对应吃黑棋, \(v\rightarrow b\) 对应推进这个棋(白棋同理), 但在这种情况下存在白边 \(b\rightarrow a\) , 所以 \(eval(a)<eval(b)\) .
直接按超现实数做法做即可.
\(\text{[ABC230H]Bullion}\)
\(\color{red}{\text{[HARD]}}\)
设答案的组合类为 \(\mathcal{F}\) , 空袋子的组合类为 \(\mathcal{H}\) , 金条的组合类为 \(\mathcal{G}\) , 根据题目可得 \(\mathcal{F}=\mathcal{H}\times\operatorname{MSET}_{\geqslant 1}(\mathcal{F}+\mathcal{G})\) .
其 OGF 为 \(F(z)=z\times \left(\exp{\left(\sum\limits_{i>0}{\dfrac{F(z^i)+G(z^i)}{i}}\right)}-1\right)\) , 即 \(F(z)+z-z\exp{\left(\sum\limits_{i>0}{\dfrac{F(z^i)+G(z^i)}{i}}\right)}=0\) .
这个形式启发我们通过牛顿迭代得到 \(F\) .
我们不妨设 \(H(z)=G(z)+\sum\limits_{i>1}{\dfrac{F(z^i)+G(z^i)}{i}}\) , 对于任意 \(i>1\) 的 \(F(z^i)\) 和 \(G(z^i)\) 都可看做常数.
重写式子为牛顿迭代需要的式子 \(A(x)=x+z-z\exp{\left(x+H(z)\right)}\) , 求导得 \(A'(x)=1-z\exp{(x+H(z))}\) , 可得到 \(F(z)=F_0(z)-\dfrac{F_0(z)+z-z\exp{(F_0(z)+H(z))}}{1-z\exp{(F_0(z)+H(z))}}\) .
若视求解 \(H(z)\) 在 \(z^n\) 项内的截断复杂度为 \(\mathcal{O}(n\log{n})\) , 则总时间复杂度为 \(\mathcal{O}(n\log{n})\) .
\(\text{[ABC233H]Manhattan Christmas Tree}\)
\(\color{green}{\text{[EASY]}}\)
感觉碰到这种题就曼哈顿和切比雪夫或者互相转一下就行了.
转完之后二分答案, 变成二维数点.
\(\text{[ABC234H]Enumerate Pairs}\)
\(\color{green}{\text{[EASY]}}\)
抽象题, 这我没想到.
平面分块, 划分成若干个 \(K\times K\) 的正方形, 对于一个在正方形内的点也只会有和以这个正方形为九宫格中心的正方形内的点可能合法, 暴力枚举每个点以及其九宫格中每个点即可.
然后来分析复杂度.
我们假设一个正方形内有 \(x\) 个点, 我们将这个正方形划分成四个 \(\dfrac{K}{2}\times \dfrac{K}{2}\) 的小正方形, 小正方形内的点必然满足, 我们设这四个小正方形分别有 \(a,b,c,d\) 个点, 我们有 \(a+b+c+d=x\) ,不妨设 \(a\geqslant b\geqslant c\geqslant d\) , 因此 \(a\geqslant \dfrac{x}{4}\) , 所以一个小正方形内至少有 \(\dfrac{a(a-1)}{2}\) 个点对, 是 \(\mathcal{O}(x^2)\) 的, 带小常数.
设 \(cnt_i\) 表示第 \(i\) 个正方形内的点数, 我们有 \(\sum{cnt_i^2}\leqslant 400000\times C\) .
我们匹配相邻九宫格的复杂度是 \(cnt_icnt_j\) 显然其 \(\leqslant \max\{cnt_i^2,cnt_j^2\}\) , 因此总复杂度还是因此总复杂度还是没变.
可以发现取一个合适大小的正方形效果都是一样的.
\(\text{[ABC239H]Dice Product 2}\)
\(\color{green}{\text{[EASY]}}\)
一眼的 \(dp\) , 令 \(f_n\) 表示至少到 \(n\) 的期望次数, 暴力转移 \(f_n=1+\dfrac{1}{N}\sum\limits_{i=1}^{N}{f_{\lceil\frac{n}{i}\rceil}}\) , \(f_n=\dfrac{N}{N-1}+\dfrac{1}{N-1}\sum\limits_{i=2}^{N}{f_{\lceil\frac{n}{i}\rceil}}\) , 答案即为 \(f_{m+1}\) .
记忆化, 整除分块, map 优化空间, 总时空复杂度为 \(\mathcal{O}(m^{\frac{3}{4}})\) .
\(\text{[ABC236H]Distinct Multiples}\)
\(\color{green}{\text{[EASY]}}\)
\(a_i\not= a_j\) 这个限制很难受, 考虑给它容斥掉, 对于有相等关系的就连边, 那么会有容斥式子 \(\sum\limits_{S\in E}{(-1)^{|S|}f_S}\) .
我们对于每个点集 \(S\) , 令 \(g_S=\lfloor\dfrac{M}{\operatorname{lcm}\limits_{i\in S}{d_i}}\rfloor\) , \(h_n\) 为 \(n\) 个点构成的完全图选出边集的子集使得 \(n\) 个点连通的容斥系数和.
考虑求解 \(h_n\) , 我们有 \(h_1=1\) , 对于 \(n\geqslant 2\) , 如果没有连通的限制, 那么容斥系数和为 \(0\) , 我们考虑减去不连通的, 令 \(T\subset\{1,2,3,\dots,n\}\) 是包含 \(1\) 的连通块, 在 \(|T|\leqslant n-2\) 时, 容斥系数和相等, 所以只用考虑 \(|T|=n-1\) , 考虑枚举不在集合的那个点可以得到递推式 \(h_n=-(n-1)h_{n-1}\) , 所以 \(h_n=(-1)^{n-1}(n-1)!\) .
对于一个 \(|S|f_S\) 我们把它分成若干连通块 \(T_1,T_2,\dots,T_k\) , 原式等于 \(\prod\limits_{i=1}^{k}{g_{T_k}h_{|T_k|}}\) , 令 \(dp_S\) 表示点集 \(S\) 的容斥和, 我们要求的即为 \(dp_{\{1,2,3,\dots,n\}}\) , 其中 \(dp_{\varnothing}=1\) , 转移考虑枚举最小编号的点所在的连通块, 有递推式 \(dp_S=\sum\limits_{T\subset S,u\in T}{g_{T}h_Tdp_{S\setminus T}}\) .
时间复杂度 \(\mathcal{O}(3^n+2^nn)\) .
\(\text{[ABC237H]Hakata}\)
\(\color{green}{\text{[EASY]}}\)
首先有个结论, 一个字符串中本质不同的回文子串数量 \(\leqslant n\) , 证明考虑在字符串末尾添加一个字符, 本质不同的回文串数量最多增加 \(1\) .
考虑反证法, 设添加字符 \(s_n\) 之后 \(s_{x,n}\) 与 \(s_{y,n}\) 均为之前没有出现过的回文子串, 其中 \(x<y\) , 那么根据回文串定义有 \(s_x=s_n=s_y=s_{n+x-y}\) , \(s_{x+1}=s_{n-1}=s_{y+1}=s_{n+x-y-1}\) , 以此类推可以得到 \(s_{x,n+x-y}\) 和 \(s_{y,n}\) 完全相同, 矛盾.
考虑给每个本质不同的回文串编个号, 然后对于包含关系建个 DAG , 若 \(x\rightarrow y\) 则 \(x\) 是 \(y\) 的子串, 那么题目也就是要求最大反链长度.
根据 Dilworth 定理也就是求最小连覆盖数, 这可以二分图匹配, 建一个二分图, 将每个点拆成两个点一个入点和一个出点, 若原 DAG 上 \(x\) 可达 \(y\) , 就从 \(x\) 的出点连向 \(y\) 的入点, 跑一个最大流即可.
时间复杂度 \(\mathcal{O}(n^3)\) .
\(\text{[ABC242H]Random Painting}\)
\(\color{green}{\text{[EASY]}}\)
又是没见过的期望套路呢.
将线段按 \(L_i\) 排序, 令 \(f_{i,j,k}\) 表示考虑了前 \(i\) 条线段, 覆盖了 \([1,j]\) , 恰好用了 \(k\) 条的方案数, 转移有
原问题答案即为, 在选出的集合大小为 \(i\) 时还没有覆盖 \([1,n]\) 的概率乘上新选出一个元素的期望次数的和, 即 \(\sum\limits_{i=0}^{m}{\dfrac{\binom{m}{i}-f_{m,n,i}}{\binom{m}{i}}\times \dfrac{m}{m-i}}\) .
时间复杂度 \(\mathcal{O}(m^2n)\) .
希望 \(Newbing\) 的申请快点通过吧.