【刷题记录】ABC-EF
[ABC150E] Change a Little Bit
-
使一对 \(\operatorname{f(S,T)}\) 最小:
- 贪心:\(C_i\) 越小的越早修改。
-
求所有 \(\operatorname{f(S,T)}\) 的和:
-
重排:按照 \(C_i\) 从大到小排序。
-
转换枚举角度:显然不可能枚举每一对 \(\operatorname{f(S,T)}\) 。
考虑枚举每个 \(C_i\) 的贡献。
-
排名为 \(i\) 的数被删时还有 \(j\) 个不同位置的贡献:
\[C_i\cdot {i-1\choose j-1}\cdot j\cdot 2^j\cdot 2^{i-j}\cdot 2^{n-i}\cdot 2^{n-i} \]即 \(C_i\cdot {i-1\choose j-1}\cdot j\cdot 2^{2n-i}\) 。
注:\({i-1\choose j-1}\) :因为从大到小排序,剩下 \(j-1\) 个数一定在前 \(i-1\) 个数中 。
\(2^j\) 和 \(2^{i-j}\) :这前 \(i\) 个数代表的位置 \(\operatorname{S}\) 一旦确定,\(\operatorname{T}\) 也确定。
\(2^{n-i}\cdot 2^{n-i}\):剩下的数无论 \(\operatorname{S}\) 、\(\operatorname{T}\) 是否相同都无影响。
-
故总贡献为 \(\sum\limits_{i=1}^n C_i\cdot 2^{2n-i}\sum\limits_{j=1}^i{i-1\choose j-1}\cdot j\) 。
-
将后一个和式形式化地写作:\(\sum\limits_{j=0}^n{n\choose j}\cdot(j+1)\) 。
-
构造多项式 \(g(x)=\sum\limits_{j=0}^n{n\choose j}\cdot(j+1)x^j\) ,所求即为 \(g(1)\) 。
-
设 \(G'(x)=g(x)\) ,则:
\[\begin{align} G(x)&=\sum\limits_{j=0}^n{n\choose j}\cdot x^{j+1}\\ &=x\sum\limits_{j=0}^n{n\choose j}\cdot x^j\\ &=x{(x+1)}^{n-1} \tag{1} \end{align} \]注:\((1)\) :二项式定理。
-
\(g(x)=G'(x)={(x+1)}^{n-1}+(n-1)x{(x+1)^{n-2}}\) 。
\(g(1)=(n+1)\cdot 2^{n-2}\) 。
-
代入原式,化简得:
\[\operatorname{ans} = 2^{2n-2}\sum\limits_{i=1}^{n}c_i \cdot (i+1) \]
-
-
总结:贪心后转换枚举角度统计贡献 。
第二个和式构造多项式求解,与第一类斯特林数前缀和类似,更基础。
该题中多项式形式幂级数与封闭形式的转换比较常见。
[ABC150F] Xor Shift
-
每个 \(k\) 对应一个 \(x\) ,故考虑消去 \(x\) 的影响。
-
利用性质 \(x\oplus x=0\) ,得:
\[\begin{aligned} b_{i}\oplus b_{i+1}&=a'_{i}\oplus a'_{i+1}\\ &=(a_{i+k\bmod n}\oplus x)\oplus(a_{i+k+1\bmod n}\oplus x)\\ &=a_{i+k\bmod n}\oplus a_{i+k+1\bmod n} \end{aligned} \] -
将 \(a\) 数组复制两倍,并分别将 \(a\) 和 \(b\) 相邻两位异或起来,最后做
KMP
匹配。
[ABC151E] Max-Min Sums
- 转换枚举角度:枚举一个数会在多少个集合中成为最值。
- 顺序排序,去头或去尾计算。
[ABC151F] Enclose All
- 最小圆覆盖模板。
[ABC152E] Flatten
- 容易知道当 \(a_i\cdot b_i=\operatorname{lcm}(a_1,a_2,\ldots,a_n)\) 时,\(\sum\limits_{i=1}^n b_i\) 最小 。
- 直接求 \(\operatorname{lcm}\) 会爆
long long
,用质因数分解。 - \(\operatorname{ans}= \operatorname{lcm}(a_1,a_2,\ldots,a_n)\sum\limits_{i=1}^n {1\over a_i}\) 。
[ABC152F] Tree and Constraints
-
容斥:设限制条件的集合为 \(\operatorname{P}\) ,\(\operatorname{f(S)}\) 表示集合 \(\operatorname{S}\) 中所有路径上的所有边均为白色的方案数 。
则:
\[\operatorname{ans}=\sum\limits_{\operatorname{S}\in \operatorname{P}} (-1)^{|\operatorname{S}|}\operatorname{f(S)} \] -
设 \(\operatorname{S}\) 中共有 \(x\) 条边,则 \(\operatorname{f(S)}=2^{n-1-x}\) 。
-
递推求路径并,
bitset
优化。
[ABC153E] Crested Ibis vs Monster
- 完全背包。
[ABC153F] Silver Fox vs Monster
- 从左往右贪心,差分维护一下。
[ABC154F] Many Many Paths
- 直接对原式进行化简。\[\begin{align} \text{ans}&=\sum\limits_{i=r_1}^{r_2}\sum\limits_{j=c_1}^{c_2}f(i,j)\\ &=\sum\limits_{i=r_1}^{r_2}\sum\limits_{j=c_1}^{c_2}{i+j\choose j}\\ &=\sum\limits_{i=r_1}^{r_2}\left(\sum\limits_{j=0}^{c_2}{i+j\choose j}- \sum\limits_{j=0}^{c_1-1}{i+j\choose j}\right)\\ &=\sum\limits_{i=r_1}^{r_2}\left({i+c_2+1\choose c_2} -{i+c_1-1+1\choose c_1-1}\right)\tag{1}\\ &=\sum\limits_{i=r_1}^{r_2}\left({i+c_2+1\choose c_2} -{i+c_1\choose c_1-1}\right)\\ &=\sum\limits_{i=r_1}^{r_2}\left({i+c_2+1\choose i+1} -{i+c_1\choose i+1}\right) \end{align} \]
注:利用性质:\({n+m+1\choose m}={n+m+1\choose n+1}=\sum\limits_{i=0}^m{n+i\choose i}\) 。
[ABC154E] Almost Everywhere Zero
- 数位
DP
简单题 。
[ABC155E] Payment
- 贪心。
- 若 \(N_i<5\) ,则 \(x_i=N_i\) 。
- 若 \(N_i>5\) ,则 \(x_i=10-N_i\) 。
- 若 \(N_i=5\)
- 若 \(N_{i-1}<5\) ,则 \(x_i=N_i\) 。
- 若 \(N_{i-1}\geq 5\) ,则 \(x_i=10-N_i\) 。
[ABC155F] Perils in Parallel
-
异或差分,把区间修改转换成两点 ( \(l\) 和 \(r+1\) ) 修改。
-
将 \(l\) 和 \(r+1\) 连边,节点的值为差分后的值,序列转化为图。
-
可以发现:若一条边两端均为 \(1\) ,则可消去两个 \(1\) 。
若只有一个端点为 \(1\) ,则操作一次,\(1\) 在图上移动一次。
-
因为只有一条边两端均为 \(1\) 时才可消去 \(1\),故 \(1\) 的个数为偶数时才有解。
-
建出
dfs
树,把 \(1\) 都移到根节点即可。 -
注意:
- 可能有多个联通块。
- 要考虑 \(n+1\) 号节点的影响。
-
总结:差分后将序列转图,再用
dfs
树构造答案 。
[ABC156E] Roaming
-
多个移动方案的最终结果可能是同一种,故抽象成数本质不同对象个数。
-
抓住本质,忽略过程,只考虑最终结果。
-
容易想到把 \(n\) 个人分到 \(n\) 个房间。
-
但题目有限制:只移动 \(k\) 次。故不能用裸的插板法求解。
-
进一步思考发现,移动 \(k\) 次,最多会有 \(k\) 个房间空出来。
-
故枚举空房间数,可得:
注:\(i\) 个人分到 \(n-i\) 个不同房间中,每个房间中人数可以为 \(0\) ,
用插板法得出方案数为:
此外,\(k=1\) 时不可能有 \(0\) 个空房间,但题目限制 \(k\geqslant 2\) 。
-
可以发现对于枚举的所有 \(i\),均可构造出合法移动方案。
下面给出一种简单的构造方案:
- 对于一种有 \(i\) 个空房间的方案 \(\langle a_1,a_2,\ldots,a_n\rangle\)。(其中有 \(i\) 个 \(0\))
- 先移动 \(i-1\) 次,使 \(i-1\) 个非 \(0\) 的 \(a_j\) 合法。
- 再移动剩下 \(k-i+1\) 次,使最后一个非法 \(a_j\) 合法。
- 注:\(n=2\ ,(k-i+1)\bmod 2=0\) 时最后一步无解,但题目限制 \(n\geqslant 3\) 。
[ABC156F] Modularness
- 咕掉了QwQ。
[ABC157E] Simple String Queries
- 开 \(26\) 棵树状数组维护一下每个字母即可。
[ABC157F] Yakiniku Optimization Problem
- 设答案为 \(T\) 。
- 将问题转化成 \(N\) 个圆,每个圆的半径为 \(T\over{c_i}\),判断是否存在一点被至少 \(K\) 个圆覆盖 。
- \(T\) 具有单调性,故二分答案。
- 判定思路类似 POJ 3304 线段 ,将公共区域内的一个点移动,必存在移动后的点落在边界上。
- 若边界是圆,则该公共区域是由若干的内含的圆重叠而成,则其中最小圆的圆心符合条件。
- 若边界不规则,则边界上必存在某两圆的交点符合题意。
- 综上:可能符合题意的候选点为任意两圆交点以及各圆圆心。
- 暴力枚举所有候选点判断即可。
[ABC158E] Divisible Substring
- 每个子串可以用原串的两个前缀相减后除以 \(10\) 的若干次方得到。
- 通过两个前缀 \(\bmod P\) 的余数容易得到 \(x\cdot 10^y\) 与 \(P\) 的关系。
- 故思考 \(x\) 与 \(x\cdot 10^y\) 的关系。
- 若 \((P,10)=1\) ,且 \(x\cdot 10^y\bmod P=0\),则 \(x\bmod P=0\) 。
- 若 \((P,10)\neq 1\) ,则 \(P\in\{2,5\}\) ,此时根据尾数判断即可。
[ABC158F] Removing Robots
-
容易想到根据激活关系连边建图,但暴力建图时空复杂度均不允许。
-
优化空间: 若存在三条边 \((a,b),(b,c),(a,c)\) ,则简化为 \((a,b),(b,c)\) 。
即每个机器人只由能激活它的最右边的机器人连边。
据此规则建出的图必然是一棵树或森林。
-
优化时间:倒序枚举,单调栈维护。
-
补集思想得出:每一个激活集合会对应一个未激活集合,故计算未激活集合数。
-
设节点 \(i\) 的方案数为 \(f_i\) ,则:
\[f_i=1+\prod\limits_{(i,j)\in E} f_j \]
[ABC159E] Dividing Chocolate
- 首先想到贪心,但行列都不固定不能贪心。
- 观察到 \(H\) 很小而 \(W\) 很大,故枚举行的切割情况,列贪心。
[ABC159F] Knapsack for All Segments
-
对于一个左端点为 \(l\) ,右端点为 \(r\) 的子串,其贡献为 \(l(n-r+1)\) 。
-
\(01\) 背包
DP
求子串个数时一并计算左端点的贡献。相当于提公因式,对于一个右端点 \(r\),和满足要求的所有左端点 \(l_1,l_2,\ldots\) ,
其贡献为 \((l_1+l_2+\ldots)(n-r+1)\) 。
[ABC160E] Red and Green Apples
-
将 \(A\) 个红苹果从大到小排序,取前 \(X\) 个。
将 \(B\) 个红苹果从大到小排序,取前 \(Y\) 个。
-
将剩下 \(X+Y+C\) 个苹果从大到小排序后取前 \(X+Y\) 个。
[ABC160F] Distributing Integers
-
换根
DP
。 -
把 \(j\) 合并到 \(i\) 的根上,两子树只需保证各自内部相对顺序不变即可,根据插板法得出:
\[f'_x=f_x\cdot f_y\cdot {{\text{size}}_i-1+{\text{size}}_j\choose{\text{size}}_i-1} \] -
换根时去掉一个子树的贡献然后再计算父亲的贡献即可。
-
另外,有结论:对于树上拓扑排序计数,\(\text{ans}=\dfrac{n!}{\prod\limits_{i=1}^n \text{size}_i}\) 。
因为每个点 \(i\) 的子树内部排列都只有 \(\frac{1}{\text{size}_i}\) 种是合法的 。