ARC 补题笔记 1
ARC156
A. Non-Adjacent Flip
给定长度为 \(n\ (3\le n\le 2\times10^5)\) 的 01 串,每次选定 \(1\le i,j\le n\) 且 \(|i-j|\ge2\),将 \(i,j\) 位上的数字 \(x\) 变为 \(1-x\)。求全部数字变为 \(1\) 的最小操作次数或判定无解。
与 wsf 争论了 1h 的弱智题。。考虑到 \(0\) 段数量 \(\ge2\) 且其总个数 \(cnt\) 为偶数时,答案即为 \(\dfrac{cnt}2\)。其他情况讨论一下即可。
代码:https://atcoder.jp/contests/arc156/submissions/43713067。
B. Mex on Blackboard
一个可重集合 \(S\),进行若干次(或 0 次)操作,每次选定一个 \(S'\subseteq S\),并在 \(S\) 中加入 \(\operatorname{mex}(S')\)。
求不超过 \(x\) 次操作后可能的 \(S\) 的种数。
\(1\le |S|,x\le 2\times10^5\),\(0\le S_i\le2\times10^5\)。
考虑每一次对 \(S\) 操作可能会加入什么数。
若 \(\operatorname{mex}(S)=x\),则 \(S\) 中一定包含 \(0\) 到 \(x-1\) 的所有数字。
那么将 \(S\) 中的所有的 \(i(0\leq i\leq x-1)\) 取出形成 \(S'\),则此时 \(\operatorname{mex}(S')=i\)。所以,每次操作可以加入 \(0\) 到 \(\operatorname{mex}(S)\) 中的任意一个数。
为了防止重复,我们将操作分为取 \(\operatorname{mex}\) 和不取两个阶段。
- 在进行 \(i\) 次取 \(\operatorname{mex}\) 操作后,假设当前的 \(\operatorname{mex}(S)=x\);
- 那么在后面的 \(k-i\) 次操作中,每一次操作都可以增加 \(0\) 到 \(x-1\) 的任何一个数。
这时就转化成了一个插板法经典 trick,方案数一共是 \(C_{x+k-i-1}^{k-i-1}\)。暴力枚举 \(i\) 求和即可。时间复杂度 \(O(k)\)。
代码:https://atcoder.jp/contests/arc156/submissions/43717411。
C. Tree and LCS
有一棵树 \(T\) 与一个排列 \(P\)(大小均为 \(n\ (2\le n\le 5000)\)),对于树上的一条路径 \(x=(x_1,x_2,\ldots,x_k)\)(\(x_i\) 各不相同),设 \(y=(P_{x_1},P_{x_2},\ldots,P_{x_k})\)。
定义相似度 \(S(T,P)=\max_{x\in T}\{\operatorname{LCS}(x,y)\}\),给定 \(T\),请构造一个 \(P\),使得 \(S(T,P)\) 最小。
神仙构造题。
首先猜想 \(S(T,P)=1\),证明之。
构造方法:对于手上的树,每次取出两个叶子节点交换他们的节点编号作为每个点的权值,然后删掉这两个节点。不断重复此过程。
证明:对于 \(u,v\),要想让 \(x\) 包括 \(u,v\),则其必然包括 \(u\to v\) 这条路径。而 \(u\) 子树的所有点在路径序列出现的位置在 \(u\) 之前,在权值序列出现的位置在 \(u\) 之后,不可能与 \(u\) 一起作为 \(\operatorname{LCS}\) 的一部分。
代码:https://atcoder.jp/contests/arc156/submissions/43720569。
ARC157
A. XXYYX
构造一个长度为 \(n\ (1\le n\le2\times10^5)\) 的仅含
X和Y的字符串,使得其中连续的XX、XY、YX、YY的数量分别为 \(A,B,C,D\),只需判定有无解。
考虑无解的情况,可能为:
- \(B=0,C=0\) 且 \(A\ne 0,D\ne 0\);
- \(|B-C|\ge 2\)。
代码:https://atcoder.jp/contests/arc157/submissions/43736449。
B. XYYYX
给定长度为 \(n\ (1\le n\le2\times10^5)\) 的仅含
X和Y的字符串 \(s\),选定 \(k\) 个不同位置改变该位置上的字符,求最终\[f(s)=\sum_{i=2}^n[s_i=\texttt Y][s_{i+1}=\texttt Y] \]的最大值。
优先补充长度较小的 X 段,再优先挖去长度较大的 Y 段,注意边界问题均统一后移处理。
代码:https://atcoder.jp/contests/arc157/submissions/43736449。
C. YY Garden
给定 \(H \times W\ (1\le H,W\le 10^3)\) 的矩阵,每个位置上有一个字符
X或Y。将一条路径经过的字符按顺序拼接成一个字符串 \(s\),定义该路径的权值为 \(f(s)\)。
要求每次只能向右或向下走,求,所有的 \(\binom{H + W - 2}{H - 1}\) 条左上到右下的路径,它们权值平方的和。
常见套路,维护到 \((i,j)\) 的权值和、权值平方和。预处理一下组合数,直接分别转移即可。
代码:https://atcoder.jp/contests/arc157/submissions/43741252。
ARC158
A. +3 +5 +7
给定 \(a,b,c\),判定是否可以通过任意次操作,使得 \(a=b=c\),一次操作是指:
- 选定不可重集合 \(\{u,v,w\}=\{3,5,7\}\),将 \(a,b,c\) 变成 \(a+u,b+v,c+w\)。
若可以,给出最少操作数。
很容易注意到,\(a,b,c\) 任意排列对答案没有影响。所以不妨设 \(a<b<c\)。
很容易将问题转化:令 \(x=b-a,y=c-b\)。这里交换 \(x,y\) 对答案亦没有影响。不妨设 \(x<y\)。
不难注意到,我们进行的一次操作等价于将 \(y-x\) 加上 \(6\) 或 \(0\) 或 \(-6\)。最终需要将 \(y-x\) 变成 \(0\)(这只是第一步,我们会在下面提到)。
得到一个判定有解的条件:\(y-x\equiv0\pmod 6\)。
此外,显然 \(x\equiv y\equiv0\pmod2\) 时才能有解。
下面考虑到,先进行若干次操作使得 \(x=y=p\);接下来使用若干次操作(将 \(x,y\) 同时减去 \(2\))使得 \(x=y=0\)。
首先,显然应使用 \(\dfrac{y-x}6\) 次操作得到 \(p\);为使第二步操作数量尽可能少,我们在第一步中始终让 \(x\) 只增加 \(2\)。这样,获得了最小的 \(p\)。
答案即为此时的 \(\dfrac{y-x}6+\dfrac p2\)。
易证无解情况等价于 \(y-x\not\equiv 0\pmod 6\) 或 \(p\not\equiv0\pmod2\)。
代码:https://atcoder.jp/contests/arc158/submissions/43747307。
B. Sum-Product Ratio
给定 \(\{x_n\}\ (3\le n\le 2\times10^5,x_i\in[-10^6,0)\cup(0,10^6]\))。求
\[\dfrac{x_i+x_j+x_k}{x_ix_jx_k} \]的最大值(\(i\ne j\ne k\))。
和 [CSP-S 2022] 假期计划 有异曲同工之妙。
按照 \(\dfrac1{x_i}\) 排序,拉最大的三个和最小的三个出来即可。
代码:https://atcoder.jp/contests/arc158/submissions/43748586。
C. All Pair Digit Sums
记 \(f(x)\) 为 \(x\) 的各位之和。给定 \(\{a_n\}\ (1\le n\le 2\times 10^5,1\le a_i\le 10^{15})\),求出
\[\sum_{i=1}^n\sum_{j=1}^nf(a_i+a_j) \]
拆式子,记进位次数为 \(k\),\(f(a_i+a_j)=f(a_i)+f(a_j)-9k\)。分别求和即可。
代码:https://atcoder.jp/contests/arc158/submissions/43749833。
ARC159
A. Copy and Paste Graph
垃圾题,扔代码:https://atcoder.jp/contests/arc159/submissions/43763342。
记得开 long long!!!
B. GCD Subtraction
代码:https://atcoder.jp/contests/arc159/submissions/43764210。
C. Permutation Addition
给定正整数序列 \(\{a_n\}\ (2\le n\le 50,1\le a_i\le 50)\)。
你需要进行如下操作 \(0\sim 10^4\) 次,使得 \(A\) 中的数全部相等:
- 选择一个 \((1,2,\cdots,n)\) 的排列 \((p_1,p_2,\cdots,p_n)\),将序列 \(A\) 变为 \((a_1+p_1,a_2+p_2,\cdots,a_n+p_n)\)。
有解的判定:
- \(n\) 为奇数时 \(\sum a_i\bmod n=0\);
- \(n\) 为偶数时 \(\sum a_i\bmod n=0\) 或 \(\dfrac n2\)。
直接做,绝对不会超过次数限制。
代码:https://atcoder.jp/contests/arc159/submissions/43771288。
D. LIS 2
给定 \(n\ (1\le n\le 2\times 10^5)\) 个操作,每次操作给出 \(l,r\),并在 \(a\) 序列里依次添加 \(i\in[l,r]\)。
求最后 \(a\) 的最长上升子序列。
简单 dp,离散化后上两棵线段树维护一下最大值即可。(原来这就是权值线段树)
本文来自博客园,作者:CSP_Sept,转载请注明原文链接:https://www.cnblogs.com/plenilunesept/p/17590352.html

浙公网安备 33010602011771号