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)\) 的仅含 XY 的字符串,使得其中连续的 XXXYYXYY 的数量分别为 \(A,B,C,D\),只需判定有无解。

考虑无解的情况,可能为:

  1. \(B=0,C=0\)\(A\ne 0,D\ne 0\)
  2. \(|B-C|\ge 2\)

代码:https://atcoder.jp/contests/arc157/submissions/43736449

B. XYYYX

给定长度为 \(n\ (1\le n\le2\times10^5)\) 的仅含 XY 的字符串 \(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)\) 的矩阵,每个位置上有一个字符 XY

将一条路径经过的字符按顺序拼接成一个字符串 \(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,离散化后上两棵线段树维护一下最大值即可。(原来这就是权值线段树)

代码:https://atcoder.jp/contests/arc159/submissions/43902466

posted @ 2023-07-29 19:31  CSP_Sept  阅读(51)  评论(0)    收藏  举报