ARC/CF记录

\(\color{blue}★\) 表示巧妙但有点单薄的题。

\(\color{red}★\) 表示分析过程曲折复杂,且有启发的题。

\(\color{yellow}★\) 表示两者兼有,神仙题!

❤️ 我也不知道为什么但就是比较喜欢

上述标记和题目难度没有必然关系。

ARC187

A

B

发现,对于一对 \((i,j)\) 如果满足 \(a_i\le a_j\),那么 \(i\sim j\) 每个点都在一个连通块里。因为对于 \(i<k<j\),要么 \(a_i\le a_k\) 要么 \(a_k\le a_j\)

所以有 \((i,i+1)\) 不连边的条件:

\[\min_{j=1}^{i}a_j>\max_{j=i+1}^{n}a_j \]

\(A\) 里满足该条件的 \(i\) 共有 \(x\) 个,那么 \(f(A)=x+1\)

于是对于每个 \(i\) 去考虑多少种方案中 \((i,i+1)\) 不连边。令 \(p_i\) 表示 \(1\sim i\) 的最小值,\(s_i\) 表示 \(i\sim n\) 的最大值(\(-1\) 分别视为 \(m\)\(1\))。

考虑枚举 \(1\sim i\) 的最小值 \(x\),则 \(i+1\sim n\) 的最大值必须 \(<x\),所以 \(s_{i+1}<x\le p_i\)

考虑前半部分,如果 \(x\ne p_i\),那么必有一个 \(-1=x\)。考虑看哪些 \(-1=x\),则剩下的只要 \(>x\) 即可。令 \(q\)\(1\sim i\)\(-1\) 的个数,所以方案为:

\[\begin{aligned} \sum_{i=1}^{q}C_{q}^{i}(m-x)^{q-i}&=\sum_{i=0}^{q}C_{q}^{i}1^i(m-x)^{q-i}-(m-x)^{q}\\ &=(m-x+1)^{q}-(m-x)^q \end{aligned} \]

否则如果 \(x=p_i\),那么所有 \(-1\) 只要 \(\ge x\) 即可,即为 \((m-x+1)^q\)

考虑后半部分,由于只要 \(<x\),所以在 \(1\sim x-1\) 中任选,即为 \((x-1)^{p-q}\)\(p\)\(-1\) 的总数。两部分相乘即为总方案数。

ARC201

A

\(cnt_a\) 为执行 \(a+b\) 的操作数,\(cnt_b\) 为执行 \(b+c\) 的操作数,则要最大化 \(\min(cnt_a,cnt_b)\)

发现减少一个 \(cnt_a\) 最多只会增加一个 \(cnt_b\),所以可以先最大化 \(cnt_a\) 后调整。

对于 \(i\),如果 \(a_i+c_i\le b_i\),那么 \(cnt_a\)\(cnt_b\) 分别加上 \(a_i\)\(c_i\) 即可;否则优先处理 \(cnt_a\),令 \(x=\min(a_i,b_i)\)\(y=\min(b_i-x,c_i)\),则分别加上 \(x,y\) 即可,同时减少 \(cnt_a\) 以增加 \(cnt_b\) 的次数最多为 \(\min(x,c-y)\)

最后处理,如果 \(cnt_a\le cnt_b\),不需要减少了,答案就是 \(cnt_a\)。否则,令 \(s\) 为最多减少的次数,如果 \(cnt_a-s\ge cnt_b+s\),则答案为 \(cnt_b+s\),否则就是 \(\frac{cnt_a+cnt_b}{2}\)

B

不断执行如下操作(每个体积都可以添加无限个价值为 \(0\) 的物品):

  • \(w\) 为偶数,那么可以将体积为 \(1\) 的物品合并为体积为 \(2\) 的物品,并将 \(w\) 和所有物品体积除 \(2\) 显然不影响答案。合并的时候显然将价值从大到小相邻合并最优。
  • \(w\) 为奇数,那么将体积为 \(1\) 的物品中最大价值取出,再变成第一种情况即可。

C

首先容易想到建出 Trie,考虑统计答案。

令每个字符串的结尾点为关键点,将 Trie 上只有一个儿子的点补上一个叶子,于是问题转换成选出若干个关键点,使得所有根到叶子的路径都经过选出的点的方案数。

这东西可以树形 dp,在线每次修改只会修改一条链。

D

如果将 \(A\)\(B\) 递增排序,那么最优的方案肯定是选取一个点 \(s\) 分成 \([1,s-1]\)\([s,r]\) 两段区间,然后每段区间 \(a_i\)\(b_i\) 交替相加。

要求 \([s,r]\) 区间 \(a_i\)\(b_i\) 交替相加结果都 \(\ge m\)\(s\) 最小,因为 \(s\) 越大 \(\max(a+b)\) 越大。然后直接二分即可。

CF2150

D

首先思考哪种状态是合法的,设 \(p_i\) 表示 \(i\) 位置上的人数,容易发现

  • \(p_i\) 的值是一段连续区间,假设是 \([L,R]\)
  • \(\forall i\in (L,R)\)\(p_i\) 是奇数。

是合法的充要条件,模拟过程可得到。

于是考虑统计权值和,假设 \(L=1\),则枚举 \(R\),不妨换一种形式表达 \(p\)

  • \(p_1=2q_1+x(1\le x\le 2)\)
  • \(p_i=2q_i+1(1<i<R)\)
  • \(p_R=2q_R+y(1\le y\le 2)\)

考察 \(q_i\) 的性质,容易发现 \(\sum q_i=\frac{n-x-y-(R-2)}{2}\),然后求 \(\sum 2q_i a_i\)。然后发现 \(q_i\) 是轮换对称的,所以 \(q_i\) 的期望值就是 \(\frac{n-x-y-(R-2)}{2R}\),于是就变成 \(w \frac{n-x-y-(R-2)}{R}\sum a_i\),其中 \(w\)\(q_i\) 的方案数,用隔板法可求。

F

第一步选 \(k=3\),因为 wxr 说加的边最多。

然后考虑第二步直接选 \(\lceil\frac{d}{2}\rceil+1\),其中 \(d\) 为原图任意一棵生成树的直径,接下来说明对于每个点对一定存在长度为 \(p=\lceil\frac{d}{2}\rceil\) 的路径。

  • \(dis_{u,v}\ge p\),把树上 \(u,v\) 路径拿下来,先若干步 \(2\) (由于第一步是可行的)后再若干步 \(1\) 即可。
  • \(dis_{u,v}<p\),考虑找到点 \(x\) 使得 \(|u\leadsto x\bigcup u\leadsto v|=p+1\),这样的 \(x\) 是一定存在的,因为考虑距 \(u\) 最远的点,其距离一定是 \(\ge p\) 的(直径某一端点 \(t\))。然后考虑构造,分类讨论即可。

CF2152

F

首先把条件改一下,因为 \(y\) 有序,假设选了 \(p_1,p_2,\cdots,p_k\),则等价于要求 \(\forall i\ge 3,y[p_{i}]-y[p_{i-2}]>z\)

所以考虑对于每个 \(i\),找到前面第一个 \(j\) 满足 \(y_i-y_j>z\),记为 \(t_i\),则 \(p_{i-2}\le t[p_i]\)

然后再考虑,区间 \([l,r]\) 选出来的子集一定可以包含 \(\{r-1,r\}\),否则将后两个替换为 \(r-1\)\(r\) 一定不劣,于是考虑从 \(r-1\)\(r\) 开始跳 \(t\),这个可以倍增预处理,如果跳到某个位置相同后,则要将其中一个数 \(-1\),然后变成子问题。

G

首先将题目要求转换为,有多少个 \(u\) 满足 \(a_u=1\) 且子树内没有其他 \(1\)。然后有子树,有翻转,考虑括号序。将 \(a_u=1\) 进来和出去分别看为 \(1\)\(3\)\(a_u=0\) 看为 \(0\)\(2\),则转为求最长的 \(131313\cdots\),用线段树维护即可。对于子树翻转,交换 \(1,0\)\(2,3\) 即可。

CF2159

D2

首先需要注意几个关键性质:

  • 选取的右端点一定是后缀最小值,不然替换后一定不劣。
  • 任何区间代价都 \(\le 2\log V\),形如 \([1,2]\)\([2,4]\)\(\cdots\)
  • 增加一段的代价 \(\le 3\),如果 \(\ge 4\),一定能分成两段,使得分别为 \(2\)\(\lceil \frac{x}{2}\rceil\)

考虑对于一个右端点 \(i\),求出 \(w(l,i)\le j\) 的最左的 \(l\),记为 \(f_{i,j}\),考虑然后求。即枚举左边加入段的代价,设 \(L_{i,j}\) 表示 \(\mathtt{cost}(l,i)\le j\) 的最左的 \(l\),那么容易转移 \(f_{i,j}=\min \{L_{f_{i,j-k}-1,k}\}\)

差分算答案即可。

E

先考虑求 \([x^k]F(n)\)。直接做显然不好做,注意到 \(n\le 3\times 10^5\),考虑分块。

假设块长为 \(B\),先递推算出 \(F(0\sim B-1)\),这一部分时间复杂度 \(O(B^2)\)。然后要求出任意一个 \(F(n)\),还要算出 \(F(0,B,2B,\cdots,\lfloor \frac{N}{B}\rfloor B)\),假设当前要求 \(F(m)\)

由于 \(F(m)=f^m\),其中 \(f=ax^2+bx+c\),考虑一种常见思路,即先求导。

\[F(m)=f^m\\ F'(m)=mf^{m-1}f'\\ F'(m)f=mF(m)f' \]

考察 \([x^{k-1}]\)(以下记 \(F[k]\) 表示 \([x^k]F(m)\)):

\[F[k]kc+F[k-1](k-1)b+F[k-2](k-2)a=m(F[k-1]b+2F[k-2]a)\\ F[k]=\frac{(m-k+1)bF[k-1]+(2m-k+2)aF[k-2]}{kc} \]

所以先求出 \(F[0]\)\(F[1]\) 便可递推算了,这一部分时间复杂度 \(O(\frac{N^2}{B})\)

然后每次询问 \(n,k\),只需要算 \(F(n\bmod B)\cdot F(\lfloor \frac{n}{B}\rfloor B)\) 的第 \(k\) 项,假设两个多项式长度分别为 \(p,q\),则这一部分时间复杂度是 \(O(\min(p,q))=O(B)\) 的。所以取 \(B=\sqrt N\) 最优。

现在是求前 \(k\) 项的和,只需要将 \(F(0,B,2B,\cdots)\) 做一遍前缀和即可。

F

将路径上的点拿出来建序列,则 \(f\) 是一个滑动窗口。

首先发现由 \(f(l,p\sim p+l-1)\) 构成的函数值是一个单谷函数,证明考虑如果 \(f(l,p)<f(l,p+1)\),则 \(f(l,p+1)\) 为第一次出现,将对后 \(l\) 个产生贡献。

于是枚举 \(l\),分成 \(\lceil \frac{n}{l}\rceil\) 段,考虑对每一段找到其极值点,然后放到优先队列里每次往左右扩展即可。

考虑二分,首先考虑将区间里的数从大到小覆盖未覆盖的数,区间长度为 \(l\),则对于一段平台,如果位于谷底左侧则一定作为后缀出现,否则作为前缀出现。假设当前二分区间为 \([L,R]\),对于中点 \(mid\) 其函数值为 \(v=f(l,mid)\),如果 \(v\) 第一次出现的位置为 \(s\ge L\),则一定是作为前缀出现,否则是后缀,根据此移动 \(L,R\) 即可。由于谷底可能是中间一段区间,所以需要注意二分写法。

总询问次数 \(O(n\log^2 n+m)\)

CF2154

D

出得好。注意到每次割掉一个叶子需要考虑的最少,只需要保证当前不在这个点即可。联想到题目 \(3n\) 的限制,考虑当前的深度的奇偶。执行 \(1\) 操作后奇偶一定会发生变化,所以只需要让猫猫当前的深度跟当前叶子的深度不一样即可。

F1

由于 \(n\le 3000\),考虑直接枚举 \(k\)。先想如何判断一个序列是否满足,即对于 \(a_i\le k\),必须要求 \(a_i\) 前面有 \(a_i-1\) 个数也 \(\le k\);对于 \(a_i>k\),必须要求 \(a_i\) 前面有 \(a_i-k-1\) 个数也 \(>k\)

在知道这个过后,容易通过组合计数算出合法的方案数。

AGC074

A

B

考虑不变量。首先很显然的是交换不会改变和,然后再注意到由于长度相等,所以等价于两个区间里的 \(1\) 下标分别加和减定值 \(x\),所以交换不会改变 \(1\) 位置的下标和。

容易发现上面两个条件合起来是充要的。考虑怎么构造,不妨设 \(f_i\)\(g_i\) 分别表示 \(A\)\(i\)\(1\) 的下标和 \(B\)\(i\)\(1\) 的下标,考虑最终使 \(f_i=g_i\)。将其分成 \(f_i<g_i\)\(f_i>g_i\) 两类,相当于第一类的 \(1\) 要向右移,第二类要向左移。于是容易想到将两类对应起来,为了不影响后续操作,第一类要从后往前改,第二类要从前往后改。每次可以将 \(|f_i-g_i|\) 相差较小的那个归位,那么操作次数是 \(O(cnt_1)\) 的,如果 \(cnt_1>cnt_0\) 翻转即可。

C

神奇构造。考虑 \(\text{or}\) 一个数的本质,相当于将 \(p\) 中这些位抹除,于是想构造出 \(p_1\le p_2\le p_3\le \cdots\),那么 考虑递归构造。

先考虑 \(n\) 是奇数,先将 \((n-1)/2\) 构造出来,并复制一份,记当前最高位为 \(d\),将第二份 \(d+1\) 位设为 \(1\),显然原来 LIS 为 \(i\) 的变为 \(2i\) 了,考虑通过第 \(n\) 个数来调整出 \(2i+1\)。考虑将第 \(n\) 个数设为 \(p_{n-1} \text{ or }2^{d+2}\),然后把 \(a_{2i+1}\) 设为 \(a_{2i}\)\(a_{2i} =a_{2_i}\text{ or }2^{d+2}\),即是否抹去 \(p_n\) 的最高位。

\(n\) 是偶数只需在 \(n-1\) 的基础上加一个元素即可。

AGC002

F

先考虑判定。容易发现一个充要条件,即对于任意前缀颜色 \(0\) 的个数需要大于等于其他颜色种类数。于是考虑设 \(f_{i,j}\) 表示已经放了 \(i\) 个颜色 \(0\) 的球,\(j\) 种其他颜色的球的方案数。转移只需考虑下一个放哪种球,放非颜色 \(0\) 的球时要一次放满 \(k-1\) 个,通过组合数算即可。

AGC006

D

看到中位数,考虑二分+01序列。即新序列 \(b_i=[a_i\ge x]\)。考虑这个01序列的变化规律,手玩容易发现当相邻两个 \(b\) 相等时会向上拓展,直到被其他相邻段合并。然后再观察到影响答案的是距离终点最近的相邻段,并且唯一,于是这道题就做完了。

AGC007

C

没啥思路,考虑手玩一下。比如当 \(n=3\) 时:

考虑变到 \(n=2\) 每段长度的期望,容易得到

\[\frac{8d+5x}{6}\ \ \ \ \ \frac{8d+15x}{6}\ \ \ \ \ \frac{8d+25x}{6}\ \ \ \ \ \frac{8d+35x}{6} \]

发现这又是一个等差数列,并且分析第一段得到首项为 \(\frac{(2n+2)d+5x}{2n}\),第二段减第一段得到公差为 \(\frac{(2n+4)x}{2n}\)。于是只需要算出每一步的期望长度 \(\frac{\sum_{i=0}^{2n-1}(d+ix)}{2n}=d+\frac{2n-1}{2}x\)

posted @ 2025-10-14 18:33  _chara  阅读(23)  评论(0)    收藏  举报
Title