专栏文章

AT/CF记录

个人记录参与者 2已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@mip13sxc
此快照首次捕获于
2025/12/03 04:26
3 个月前
此快照最后确认于
2025/12/03 04:26
3 个月前
查看原文
\color{blue}★ 表示巧妙但有点单薄的题。
\color{red}★ 表示分析过程曲折复杂,且有启发的题。
\color{yellow}★ 表示两者兼有,神仙题!
❤️ 我也不知道为什么但就是比较喜欢
上述标记和题目难度没有必然关系。

ARC187

A

B

发现,对于一对 (i,j)(i,j) 如果满足 aiaja_i\le a_j,那么 iji\sim j 每个点都在一个连通块里。因为对于 i<k<ji<k<j,要么 aiaka_i\le a_k 要么 akaja_k\le a_j
所以有 (i,i+1)(i,i+1) 不连边的条件:
minj=1iaj>maxj=i+1naj\min_{j=1}^{i}a_j>\max_{j=i+1}^{n}a_j
AA 里满足该条件的 ii 共有 xx 个,那么 f(A)=x+1f(A)=x+1
于是对于每个 ii 去考虑多少种方案中 (i,i+1)(i,i+1) 不连边。令 pip_i 表示 1i1\sim i 的最小值,sis_i 表示 ini\sim n 的最大值(1-1 分别视为 mm11)。
考虑枚举 1i1\sim i 的最小值 xx,则 i+1ni+1\sim n 的最大值必须 <x<x,所以 si+1<xpis_{i+1}<x\le p_i
考虑前半部分,如果 xpix\ne p_i,那么必有一个 1=x-1=x。考虑看哪些 1=x-1=x,则剩下的只要 >x>x 即可。令 qq1i1\sim i1-1 的个数,所以方案为:
i=1qCqi(mx)qi=i=0qCqi1i(mx)qi(mx)q=(mx+1)q(mx)q\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=pix=p_i,那么所有 1-1 只要 x\ge x 即可,即为 (mx+1)q(m-x+1)^q
考虑后半部分,由于只要 <x<x,所以在 1x11\sim x-1 中任选,即为 (x1)pq(x-1)^{p-q}pp1-1 的总数。两部分相乘即为总方案数。

ARC201

A

cntacnt_a 为执行 a+ba+b 的操作数,cntbcnt_b 为执行 b+cb+c 的操作数,则要最大化 min(cnta,cntb)\min(cnt_a,cnt_b)
发现减少一个 cntacnt_a 最多只会增加一个 cntbcnt_b,所以可以先最大化 cntacnt_a 后调整。
对于 ii,如果 ai+cibia_i+c_i\le b_i,那么 cntacnt_acntbcnt_b 分别加上 aia_icic_i 即可;否则优先处理 cntacnt_a,令 x=min(ai,bi)x=\min(a_i,b_i)y=min(bix,ci)y=\min(b_i-x,c_i),则分别加上 x,yx,y 即可,同时减少 cntacnt_a 以增加 cntbcnt_b 的次数最多为 min(x,cy)\min(x,c-y)
最后处理,如果 cntacntbcnt_a\le cnt_b,不需要减少了,答案就是 cntacnt_a。否则,令 ss 为最多减少的次数,如果 cntascntb+scnt_a-s\ge cnt_b+s,则答案为 cntb+scnt_b+s,否则就是 cnta+cntb2\frac{cnt_a+cnt_b}{2}

B

不断执行如下操作(每个体积都可以添加无限个价值为 00 的物品):
  • ww 为偶数,那么可以将体积为 11 的物品合并为体积为 22 的物品,并将 ww 和所有物品体积除 22 显然不影响答案。合并的时候显然将价值从大到小相邻合并最优。
  • ww 为奇数,那么将体积为 11 的物品中最大价值取出,再变成第一种情况即可。

C

首先容易想到建出 Trie,考虑统计答案。
令每个字符串的结尾点为关键点,将 Trie 上只有一个儿子的点补上一个叶子,于是问题转换成选出若干个关键点,使得所有根到叶子的路径都经过选出的点的方案数。
这东西可以树形 dp,在线每次修改只会修改一条链。

D

如果将 AABB 递增排序,那么最优的方案肯定是选取一个点 ss 分成 [1,s1][1,s-1][s,r][s,r] 两段区间,然后每段区间 aia_ibib_i 交替相加。
要求 [s,r][s,r] 区间 aia_ibib_i 交替相加结果都 m\ge mss 最小,因为 ss 越大 max(a+b)\max(a+b) 越大。然后直接二分即可。

CF2150

D

首先思考哪种状态是合法的,设 pip_i 表示 ii 位置上的人数,容易发现
  • pip_i 的值是一段连续区间,假设是 [L,R][L,R]
  • i(L,R)\forall i\in (L,R)pip_i 是奇数。
是合法的充要条件,模拟过程可得到。
于是考虑统计权值和,假设 L=1L=1,则枚举 RR,不妨换一种形式表达 pp
  • p1=2q1+x(1x2)p_1=2q_1+x(1\le x\le 2)
  • pi=2qi+1(1<i<R)p_i=2q_i+1(1<i<R)
  • pR=2qR+y(1y2)p_R=2q_R+y(1\le y\le 2)
考察 qiq_i 的性质,容易发现 qi=nxy(R2)2\sum q_i=\frac{n-x-y-(R-2)}{2},然后求 2qiai\sum 2q_i a_i。然后发现 qiq_i 是轮换对称的,所以 qiq_i 的期望值就是 nxy(R2)2R\frac{n-x-y-(R-2)}{2R},于是就变成 wnxy(R2)Raiw \frac{n-x-y-(R-2)}{R}\sum a_i,其中 wwqiq_i 的方案数,用隔板法可求。

F

第一步选 k=3k=3,因为 wxr 说加的边最多。
然后考虑第二步直接选 d2+1\lceil\frac{d}{2}\rceil+1,其中 dd 为原图任意一棵生成树的直径,接下来说明对于每个点对一定存在长度为 p=d2p=\lceil\frac{d}{2}\rceil 的路径。
  • disu,vpdis_{u,v}\ge p,把树上 u,vu,v 路径拿下来,先若干步 22 (由于第一步是可行的)后再若干步 11 即可。
  • disu,v<pdis_{u,v}<p,考虑找到点 xx 使得 uxuv=p+1|u\leadsto x\bigcup u\leadsto v|=p+1,这样的 xx 是一定存在的,因为考虑距 uu 最远的点,其距离一定是 p\ge p 的(直径某一端点 tt)。然后考虑构造,分类讨论即可。

CF2152

F

首先把条件改一下,因为 yy 有序,假设选了 p1,p2,,pkp_1,p_2,\cdots,p_k,则等价于要求 i3,y[pi]y[pi2]>z\forall i\ge 3,y[p_{i}]-y[p_{i-2}]>z
所以考虑对于每个 ii,找到前面第一个 jj 满足 yiyj>zy_i-y_j>z,记为 tit_i,则 pi2t[pi]p_{i-2}\le t[p_i]
然后再考虑,区间 [l,r][l,r] 选出来的子集一定可以包含 {r1,r}\{r-1,r\},否则将后两个替换为 r1r-1rr 一定不劣,于是考虑从 r1r-1rr 开始跳 tt,这个可以倍增预处理,如果跳到某个位置相同后,则要将其中一个数 1-1,然后变成子问题。

G

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

CF2159

D2

首先需要注意几个关键性质:
  • 选取的右端点一定是后缀最小值,不然替换后一定不劣。
  • 任何区间代价都 2logV\le 2\log V,形如 [1,2][1,2][2,4][2,4]\cdots
  • 增加一段的代价 3\le 3,如果 4\ge 4,一定能分成两段,使得分别为 22x2\lceil \frac{x}{2}\rceil
考虑对于一个右端点 ii,求出 w(l,i)jw(l,i)\le j 的最左的 ll,记为 fi,jf_{i,j},考虑然后求。即枚举左边加入段的代价,设 Li,jL_{i,j} 表示 cost(l,i)j\mathtt{cost}(l,i)\le j 的最左的 ll,那么容易转移 fi,j=min{Lfi,jk1,k}f_{i,j}=\min \{L_{f_{i,j-k}-1,k}\}
差分算答案即可。

E

先考虑求 [xk]F(n)[x^k]F(n)。直接做显然不好做,注意到 n3×105n\le 3\times 10^5,考虑分块。
假设块长为 BB,先递推算出 F(0B1)F(0\sim B-1),这一部分时间复杂度 O(B2)O(B^2)。然后要求出任意一个 F(n)F(n),还要算出 F(0,B,2B,,NBB)F(0,B,2B,\cdots,\lfloor \frac{N}{B}\rfloor B),假设当前要求 F(m)F(m)
由于 F(m)=fmF(m)=f^m,其中 f=ax2+bx+cf=ax^2+bx+c,考虑一种常见思路,即先求导。
F(m)=fmF(m)=mfm1fF(m)f=mF(m)fF(m)=f^m\\ F'(m)=mf^{m-1}f'\\ F'(m)f=mF(m)f'
考察 [xk1][x^{k-1}](以下记 F[k]F[k] 表示 [xk]F(m)[x^k]F(m)):
F[k]kc+F[k1](k1)b+F[k2](k2)a=m(F[k1]b+2F[k2]a)F[k]=(mk+1)bF[k1]+(2mk+2)aF[k2]kcF[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[0]F[1]F[1] 便可递推算了,这一部分时间复杂度 O(N2B)O(\frac{N^2}{B})
然后每次询问 n,kn,k,只需要算 F(nmodB)F(nBB)F(n\bmod B)\cdot F(\lfloor \frac{n}{B}\rfloor B) 的第 kk 项,假设两个多项式长度分别为 p,qp,q,则这一部分时间复杂度是 O(min(p,q))=O(B)O(\min(p,q))=O(B) 的。所以取 B=NB=\sqrt N 最优。
现在是求前 kk 项的和,只需要将 F(0,B,2B,)F(0,B,2B,\cdots) 做一遍前缀和即可。

F

将路径上的点拿出来建序列,则 ff 是一个滑动窗口。
首先发现由 f(l,pp+l1)f(l,p\sim p+l-1) 构成的函数值是一个单谷函数,证明考虑如果 f(l,p)<f(l,p+1)f(l,p)<f(l,p+1),则 f(l,p+1)f(l,p+1) 为第一次出现,将对后 ll 个产生贡献。
于是枚举 ll,分成 nl\lceil \frac{n}{l}\rceil 段,考虑对每一段找到其极值点,然后放到优先队列里每次往左右扩展即可。
考虑二分,首先考虑将区间里的数从大到小覆盖未覆盖的数,区间长度为 ll,则对于一段平台,如果位于谷底左侧则一定作为后缀出现,否则作为前缀出现。假设当前二分区间为 [L,R][L,R],对于中点 midmid 其函数值为 v=f(l,mid)v=f(l,mid),如果 vv 第一次出现的位置为 sLs\ge L,则一定是作为前缀出现,否则是后缀,根据此移动 L,RL,R 即可。由于谷底可能是中间一段区间,所以需要注意二分写法。
总询问次数 O(nlog2n+m)O(n\log^2 n+m)

CF2154

D

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

F1

由于 n3000n\le 3000,考虑直接枚举 kk。先想如何判断一个序列是否满足,即对于 aika_i\le k,必须要求 aia_i 前面有 ai1a_i-1 个数也 k\le k;对于 ai>ka_i>k,必须要求 aia_i 前面有 aik1a_i-k-1 个数也 >k>k
在知道这个过后,容易通过组合计数算出合法的方案数。

AGC074

B

考虑不变量。首先很显然的是交换不会改变和,然后再注意到由于长度相等,所以等价于两个区间里的 11 下标分别加和减定值 xx,所以交换不会改变 11 位置的下标和。
容易发现上面两个条件合起来是充要的。考虑怎么构造,不妨设 fif_igig_i 分别表示 AAii11 的下标和 BBii11 的下标,考虑最终使 fi=gif_i=g_i。将其分成 fi<gif_i<g_ifi>gif_i>g_i 两类,相当于第一类的 11 要向右移,第二类要向左移。于是容易想到将两类对应起来,为了不影响后续操作,第一类要从后往前改,第二类要从前往后改。每次可以将 figi|f_i-g_i| 相差较小的那个归位,那么操作次数是 O(cnt1)O(cnt_1) 的,如果 cnt1>cnt0cnt_1>cnt_0 翻转即可。

C

神奇构造。考虑 or\text{or} 一个数的本质,相当于将 pp 中这些位抹除,于是想构造出 p1p2p3p_1\le p_2\le p_3\le \cdots,那么 考虑递归构造。
先考虑 nn 是奇数,先将 (n1)/2(n-1)/2 构造出来,并复制一份,记当前最高位为 dd,将第二份 d+1d+1 位设为 11,显然原来 LIS 为 ii 的变为 2i2i 了,考虑通过第 nn 个数来调整出 2i+12i+1。考虑将第 nn 个数设为 pn1 or 2d+2p_{n-1} \text{ or }2^{d+2},然后把 a2i+1a_{2i+1} 设为 a2ia_{2i}a2i=a2i or 2d+2a_{2i} =a_{2_i}\text{ or }2^{d+2},即是否抹去 pnp_n 的最高位。
nn 是偶数只需在 n1n-1 的基础上加一个元素即可。

AGC002

F

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

AGC006

D

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

AGC007

C

没啥思路,考虑手玩一下。比如当 n=3n=3 时:
考虑变到 n=2n=2 每段长度的期望,容易得到
8d+5x6     8d+15x6     8d+25x6     8d+35x6\frac{8d+5x}{6}\ \ \ \ \ \frac{8d+15x}{6}\ \ \ \ \ \frac{8d+25x}{6}\ \ \ \ \ \frac{8d+35x}{6}
发现这又是一个等差数列,并且分析第一段得到首项为 (2n+2)d+5x2n\frac{(2n+2)d+5x}{2n},第二段减第一段得到公差为 (2n+4)x2n\frac{(2n+4)x}{2n}。于是只需要算出每一步的期望长度 i=02n1(d+ix)2n=d+2n12x\frac{\sum_{i=0}^{2n-1}(d+ix)}{2n}=d+\frac{2n-1}{2}x

CF2168

B

考虑到如果答案为 n1n-1 一定可以确定出这段区间有 11nn。由于单调性,所以可以二分出包含 11nn 的最短前缀和最短后缀,便得到了 11nn 的位置集合。
第一个人只需简单的返回 11nn 的先后顺序即可。

C

拜谢 @wxr_。考虑到增删元素操作,我们为了还原出本来的序列,考虑返回一个异或和为 00 的子集。打表发现 1201\sim 20 异或和为 00 的子集个数恰为 2152^{15}
发现 1n1\sim n 的子集异或和在 02log(n)+110\sim 2^{\lfloor\log (n)\rfloor +1}-1 均匀随机,考虑归纳证明。

ARC209

A

首先判断最开始不合法和 kk 是奇数的情况。那么第一个人每次操作会使序列不合法,第二个人每次要让序列合法。
可以证明第一个人只会不断删除一侧的字符,直接判一下就好了。

B

\color{red}★
假设 ccss 中出现次数最多的字符,并出现了 AA 次,其他字符出现了 BB 次。
首先考虑 ABA\le B,比较显然存在策略使得 f(s)=0f(s')=0
然后是 A>BA>B,设只考虑 SS 中只包含 cc 的偶回文子串个数为 g(S)g(S),那么显然有 f(S)g(S)f(S)\ge g(S)。考虑将 ss 重排使得 g(s)g(s') 最小且 f(s)=g(s)f(s')=g(s'),那么 ss' 即为答案。
再设 h(n)h(n) 表示 nncc 组成字符串的 ff 值,那么有 h(2m)=m2,h(2m+1)=m(m+1)h(2m)=m^2,h(2m+1)=m(m+1)。显然将 cc 划分段数越多越好,即分割成 B+1B+1 个连续段,设 lil_i 分别表示每段的长度,那么 g(s)=i=1B+1h(li)\displaystyle g(s')=\sum_{i=1}^{B+1}h(l_i),注意到 hh 是一个凸函数,满足 h(a)+h(b)2h(a+b2)\displaystyle h(a)+h(b)\ge 2h\left(\frac{a+b}{2}\right),所以我们又希望 lil_i 尽量接近。
A=k(B+1)+r(0rB)A=k(B+1)+r(0\le r\le B),那么 lil_i 中有 rrk+1k+1(B+1r)(B+1-r)kk。现在已经达成 g(s)g(s') 最小的条件,则还需要满足 f(s)=g(s)f(s')=g(s')。影响因素是当 lil_i 为偶数时计算了包含第 ii 段的答案,那么考虑让 lil_i 尽量为奇数。注意到当 aa 是偶数时 2h(a)=h(a1)+h(a+1)2h(a)=h(a-1)+h(a+1),所以当 lil_i 中有多个偶数时便可以将其中两个变成奇数。所以最终只会剩下至多一个偶数,让其为开头即可。

评论

3 条评论,欢迎与作者交流。

正在加载评论...