【刷题记录】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\) 个房间空出来。

  • 故枚举空房间数,可得:

\[\text{ans}=\sum\limits_{i=0}^{\min(k,n-1)}\left({n\choose i}{n-1\choose i}\right) \]

​ 注:\(i\) 个人分到 \(n-i\) 个不同房间中,每个房间中人数可以为 \(0\)

​ 用插板法得出方案数为:

\[ {i+(n-i)-1\choose (n-i)-1}={n-1\choose n-i-1}={n-1\choose i} \]

​ 此外,\(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}\) 种是合法的 。

posted @ 2021-02-19 11:12  loctopus  阅读(173)  评论(0)    收藏  举报