专栏文章

2025.11 复习

个人记录参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@min1h7iy
此快照首次捕获于
2025/12/01 19:01
3 个月前
此快照最后确认于
2025/12/01 19:01
3 个月前
查看原文
我咋啥都不会。

P1117 优秀的拆分\color{red}\text{P1117 优秀的拆分}

Problem
多测,每次给定 ss,求 ss 的所有子串的所有拆分中,有多少个是 AABB\operatorname{AABB} 的形式。
T10T \le 10n3×104n \le 3\times 10^4
1.5s,512MB1.5s, 512MB
Sol
n2n^2 是简单的,记 fif_i 表示以 ii 结尾的 AA\operatorname{AA} 串,gig_i 表示以 ii 开头的 AA\operatorname{AA} 串即可。然后是一个快速统计这种复制串的经典技巧:枚举 ll,每隔 ll 设置一个断点,这样的话一个长为 2l2l 的串一定穿过两个断点。只需要知道相邻断点的 LCP&LCS\operatorname{LCP \& LCS},然后就是区间覆盖,差分即可。复杂度是调和级数的。
ABAB\operatorname{ABAB} 的形式比较好通过 LCP&LCS\operatorname{LCP \& LCS} 统计?
扩展:求区间复制串数

P1186 玛丽卡\color{green}\text{P1186 玛丽卡}

Problem
求删边最短路。
n1000n \le 10001mn(n+1)21\le m \le \frac{n(n+1)}{2}
1s,128MB1s, 128MB
Sol
先跑出一棵最短路树。然后只考虑 1n1 \leadsto n 的路径。对于不包含在这上面的边 (u,v)(u, v),求出 1u1 \leadsto uvnv \leadsto n1n1 \leadsto n 这条路径上第一个离开/进入的点,记为 l,rl, r,然后对 [l,r][l, r] 内的点 chkmax\operatorname{chkmax} 即可。
Q:可能有多条 1u1 \leadsto u 的最短路,选择的 ll 是否会有问题?
A:不会。对于两个离开点 i,ji, j,找到 iui \leadsto u 的第一条边,我们对这条边算贡献的时候,就可以算对了。对于进入点同理。

P1852 跳跳棋\color{green}\text{P1852 跳跳棋}

Problem
给定 a,b,c,x,y,za, b, c, x, y, z。分别表示三颗珠子的初始位置和目标位置(珠子间相同)。每次可以遵循跳棋的规则进行一次操作。问是否可以达到,并求出最少步数。
值域 10910^9
1s,125MB1s, 125MB
Sol
先判断是否合法,由于操作是可逆的,可以直接求出终态(2y=x+z2y=x+z)判断是否相等。
找最少步数我们难以找到一个类似于拐弯的地方。但是我们发现一个状态想要缩小的话只有一步,这是一个类似于树的结构,然后需要找的是 LCA。二分即可。时间复杂度是两个 log\log

P2135 方块消除\color{red}\text{P2135 方块消除}

Problem
给定 nn 个相邻的区域,每个区域有长度 lil_i 和颜色。对相同颜色的长为 ll 一段消除的代价为 l2l^2,求最大代价。
n50,li20n \le 50, l_i \le 20
1s,512MB1s, 512MB
Sol
考虑区间 DP。
但是发现对于 111100001111 这种情况是难以处理的,因为正解应该是先消 00 再一起消 11。但是无法记录当前区间剩余段的长度&颜色(时空难以接受)。考虑简单的变一下,变为 fl,r,kf_{l, r, k} 表示消除了 [l,r+k][l, r + k]rr+kr\sim r+k 这一段同色)这一段的最大代价。
转移则直接扩展 kk 或枚举断点(因为这样的话要消一定要)即可。

P3286 [SCOI2014] 方伯伯的商场之旅\color{blue}\text{P3286 [SCOI2014] 方伯伯的商场之旅}

Problem
对于一个 nn 堆石子 p1..np_{1..n},每次可以移动一堆石子到另一堆石子上,代价为距离乘石子数,令 pp 的代价为其移成一堆的最小代价。
定义一个 p(x)p(x) 表示 xxKK 进制下每一位构成的序列。对 LxRL \le x \le R,求出 p(x)p(x) 的代价和。
LR1015L \le R \le 10^{15}2K202 \le K \le 20
1s,125MB1s, 125MB
Sol
最小代价是都移到中位数的位置。暴力的想法是枚举中位数的位置,但是这样会很麻烦,因为会有两个限制(L+x>RL + x > RR+x>LR + x > L),并且可能会有两个位置都有中位数。考虑一下这个东西的本质,就是类似于左右移导数均小于 00,由于和在 DP 的过程中是可计算的,因此可以直接使用这个东西来进行调整:先都移到 11,然后再枚举 121\to 2232\to 3 等过程中减小的代价。

P3327 [SDOI2015] 约数个数和\color{green}\text{P3327 [SDOI2015] 约数个数和}

Problem
injmd(ij)\sum_{i\le n} \sum_{j \le m} d(ij)
n,m105n, m \le 10^5
1s,125MB1s, 125MB
Sol
知道 d(ij)=xi,yj[xy]d(ij) = \sum_{x|i, y|j} [x \perp y] 即可。证明这玩意可以直接把 i,j,iji,j,ij 质因数分解后考虑。

P3586 [POI 2015 R2] 物流 Logistics\color{blue}\text{P3586 [POI 2015 R2] 物流 Logistics}

Problem
给定数组 aa,每次单点修改。或给定 c,sc, s,每次选出 cc 个正数减一,问能否操作 ss 次。询问的修改不会对序列造成真正的修改。
Sol
有一个比较简单的贪心,就是每次选择最大的 cc 个,但是这样并不好维护。考虑把 aia_i 填到次数里面去。由于 aisa_i \ge s 的时候只能填 ss 次,先把这些数扔出去。把每一次选出的集合列成一行。则填入 aia_i 的时候是从上到下扔进没有满的集合。然后你发现这个东西只需要判定,因此我可以直接把没有填满的列接着填而不是从上到下填(因为这时候一定不会产生重复)。于是只需要维护 ai<sa_i < sai\sum a_iaisa_i \ge sii 的数量。可以使用 BIT 维护。

P11368 [Ynoi2024] After god\color{blue}\text{P11368 [Ynoi2024] After god}

Problem
有两个初始为 00 的序列 a1..na_{1..n}b1..nb_{1..n},每次修改给定 x,yx, y,表示 axya_x \gets y,然后对 i=1,,ni = 1, \dots , nbib_i 加上 maxjiaj\max_{j \le i} a_j,然后查询 ixbi\sum_{i \le x} b_i
n,m106n,m \le 10^61x,yn1\le x,y \le n
2.5s,512MB2.5s, 512MB
Sol
你想对这个东西直接上历史和,但是失败了,因为 chkmax\operatorname{chkmax} 操作没法子拆。使用单侧递归的技巧是 2log2\log 的。想想这玩意求的实际上是什么:把 maxa\max a 按时间从上到下拆开变为 c1..t,1..nc_{1..t, 1..n}。然后求和是 ix,jtcj,i\sum_{i \le x, j \le t} c_{j, i},即矩形和。区间改值是一个上下左有边界的矩形 chkmax\operatorname{chkmax},我们直接历史和失败的原因是因为上下界均有限制并且没法差分。考虑换成从左到右扫描线(即交换求和顺序),于是就可以直接维护历史和做到线对了。

CF1342F Make It Ascending\color{green}\text{CF1342F Make It Ascending}

Problem
给定长为 nn 的序列 aa,每次可以把一个数合并到另一个数上,要求合并完后的序列单调递增,求出最小操作次数即方案。多测。
n=15n = 15 不超过 11 个,n14n \ge 14 不超过 33 个,n13n \ge 13 不超过 1010 个,n12n \ge 12 不超过 2525 个。
7s,500MB7s, 500MB
Sol
直接的不是很好做,因为可能涉及到插入。直接对最后的序列 DP(按合并的位置的顺序),由于值域是很大的,因此把答案扔进状态:fi,j,Sf_{i, j, S} 表示当前用了 ii 个集合,第 ii 个集合合并的位置在 jj,用了 SS 中的数的情况下最后一个子集的和的最小值。转移枚举超集,新的 jj' 一定是 SS 中合法的里面最小的。时间复杂度是 O(n23n)O(n^23^n)
trick:定义域和值域的交换。

P1251 餐巾计划问题\color{green}\text{P1251 餐巾计划问题}

Problem
总共 nn 天,第 ii 天需要 rir_i 块餐巾。餐巾可以购买,或将用完的餐巾快洗或慢洗。三项操作每个餐巾分别花钱:p1,p2,p3p_1,p_2,p_3(递减的非负整数),三项操作花费时间 0,t2,t30,t_2,t_3(递增)天。用完的餐巾可以延期送洗,问满足每天要求的最小费用。
n2000,1ri107,1p1,p2,p3104n\le 2000, 1 \le r_i \le 10^7, 1\le p_1, p_2, p_3 \le 10^4
4s,125MB4s, 125MB
Sol
对每天拆点为 (i0,i1)(i_0, i_1)。令 (u,v,[l,r],p)(u, v, [l, r], p) 表示 uu 连向 vv,流量在 [l,r][l, r] 之间,费用为 cc
连边:
对于 i[1,n]i \in [1, n],连边 (i0,i1,[ri,ri],0)(i_0, i_1, [r_i, r_i], 0)(i0,(i+1)0,[0,+),0)(i_0, (i+1)_0, [0, +\infin), 0)(0,i0,[0,+),p1)(0, i_0, [0, +\infin), p_1)(i1,(i+t2)0,[0,+),p2)(i_1, (i+t_2)_0, [0, +\infin), p_2)(i1,(i+t3)0,[0,+),p3)(i_1, (i+t_3)_0, [0, +\infin), p_3)(i1,0,[0,+),0)(i_1, 0, [0, +\infin), 0)
然后求上下界无源汇最小费用可行流。

P1361 小M的作物\color{green}\text{P1361 小M的作物}

Problem
小 M 现在有 nn 种作物,第 ii 种作物种植在 AA 中种植可以获得 aia_i 的收益,在 BB 中种植可以获得 bib_i 的收益,小 M 还找到了规则中共有 mm 种作物组合,第 ii 个组合中的作物共同种在 AA 中可以获得 c1,ic_{1,i} 的额外收益,共同种在 BB 中可以获得 c2,ic_{2,i} 的额外收益。
求最大种植收益。
2n103,1m1032 \le n \le 10^3, 1 \le m \le 10^3
2s,250MB2s, 250MB
Sol
二者选其一,考虑最小割建模。
对于 i[1,n]i\in[1, n],连边 (s,i,ai),(i,t,bi)(s, i, a_i), (i, t, b_i)
对于第 jj 个作物集合 SjS_{j},连边 (jA,t,c2,j),(s,jB,c1,j)(j_A, t, c_{2, j}), (s, j_B, c_{1, j})。对 iSji \in S_j,连边 (i,jA,+),(i,jB,+)(i, j_A, +\infin),(i, j_B, +\infin)
答案为 (ai+bi)+(c1,i+c2,i)mincut(\sum a_i+b_i) + (\sum c_{1, i}+c_{2, i}) - \operatorname{mincut}

P3978 [TJOI2015] 概率论\color{blue}\text{P3978 [TJOI2015] 概率论}

Problem
nn 个点的有根二叉树的叶子节点数的期望(两两不同)。
Sol
先考虑 DP。令 fif_i 表示 ii 个点的不同构二叉树个数,gig_i 表示其叶子的个数和。则 figi\frac{f_i}{g_i} 即为所求,有:
fi=j=0i1fjfij1f_i = \sum_{j = 0}^{i-1}f_jf_{i-j-1} gi=2j=0i1fjgij1g_i = 2\sum_{j=0}^{i-1}f_jg_{i-j-1}
初值:f0=1f_0=1g0=0,g1=1g_0=0, g_1 = 1
感觉这个很有一个卷积的形式,我们使用生成函数求出这两个的通项。
卡特兰数(即 ff)的生成函数 C(x)=n0CnxnC(x) = \sum_{n \ge 0} C_nx^n。拆开,有:
n0Cnxn=1+n>0i=0n1CiCni1xn\sum_{n \ge 0} C_nx^n = 1+\sum_{n > 0} \sum_{i=0}^{n-1}C_iC_{n-i-1}x^n =1+xn>0i=0n1CixiCni1xni1= 1+x\sum_{n > 0} \sum_{i=0}^{n-1}C_ix^iC_{n-i-1}x^{n-i-1} =1+xi0Cixij0Cjxj= 1+x\sum_{i\ge0}C_ix^i\sum_{j\ge0}C_jx^j =1+xC2(x)= 1+xC^2(x)
解得:C(x)=1±14x2x=2114xC(x) = \frac{1 \pm \sqrt{1-4x}}{2x} = \frac{2}{1\mp\sqrt{1-4x}}带入 C0=1C_0=1 可以知道只有 114x2x\frac{1-\sqrt{1-4x}}{2x} 这一组解
使用牛顿二项式定理拆开 14x\sqrt{1-4x}
(14x)12=n0(12n)(4x)n(1-4x)^{\frac12} = \sum_{n \ge 0} \binom{\frac12}n(-4x)^n
然后把组合数拆成下降幂后再展开:
=n0(1)n1(2n3)!!n!2n(4x)n=\sum_{n \ge 0} \frac{(-1)^{n-1}(2n-3)!!}{n!2^n}(-4x)^n =n02(2n2)!(n1)!n!xn=\sum_{n \ge 0} -2\frac{(2n-2)!}{(n-1)!n!}x^n
带入 C(x)C(x)
C(x)=1+n0(2n2)!(n1)!n!xnxC(x) = \frac{1+\sum_{n \ge 0} \frac{(2n-2)!}{(n-1)!n!}x^{n}}x
常数项消了,得到。
C(x)=n0(2n)!n!(n+1)!xnC(x) = \sum_{n \ge 0} \frac{(2n)!}{n!(n+1)!}x^{n}
我们推导 G(x)=n0gnxnG(x) = \sum_{n \ge 0} g_nx^n。带入转移式:gi=2j=0i1fjgij1g_i = 2\sum_{j=0}^{i-1}f_jg_{i-j-1}
G(x)=x+2n2i=0n1figni1xnG(x) = x+2\sum_{n\ge 2}\sum_{i=0}^{n-1}f_ig_{n-i-1}x^n =x+2xn2i=0n1fixigni1xni1= x+2x\sum_{n\ge 2}\sum_{i=0}^{n-1}f_ix^ig_{n-i-1}x^{n-i-1}
由于 g0=0g_0 = 0,可以得到:G(x)=x+2xC(x)G(x)G(x) = x+2xC(x)G(x)
G(x)=x12xC(x)G(x)=\frac{x}{1-2xC(x)}。带入 C(x)=114x2xC(x)=\frac{1-\sqrt{1-4x}}{2x}
G(x)=x14xG(x)=\frac{x}{\sqrt{1-4x}} =xn0(12n)(4x)n=x\sum_{n\ge0}\binom{-\frac12}{n}(-4x)^n =xn0(1)n(2n)!(n!)2xn=x\sum_{n\ge0}(-1)^n\frac{(2n)!}{(n!)^2}x^n
得到 g(n)=(2n2)!((n1)!)2g(n) = \frac{(2n-2)!}{((n-1)!)^2}。则 g(n)f(n)\frac{g(n)}{f(n)} 为:
(2n2)!((n1)!)2(2n)!n!(n+1)!=n22(n+1)2n(2n1)=2n(n+1)2(2n1)\frac{\frac{(2n-2)!}{((n-1)!)^2}}{\frac{(2n)!}{n!(n+1)!}} = \frac{n^22(n+1)}{2n(2n-1)}=\frac{2n(n+1)}{2(2n-1)}
至此,我们完成了这道题。

P3599 Koishi Loves Construction\color{green}\text{P3599 Koishi Loves Construction}

Problem
给定 nn,要求构造两个 1n1\sim n 的排列 a,ba, b 满足 aa 的前缀和在模 nn 意义下两两不同,bb 的前缀积在模 nn 意义下两两不同。
n105n \le 10^5
1s,125MB1s, 125MB
Sol
aa 的构造:n,1,n2,3,n4,n, 1, n-2, 3, n-4, \dots。这个东西在 nn 为奇数的时候无解。证明一下,因为 1+2++n=n(n+1)21+2+\dots+n=\frac{n(n+1)}2nn 为奇数的时候模 nn00,因此会有两个前缀和相同。
bb 的构造:
  • 由于最后乘 nn 一定会让积变为 00,因此一定是把 nn 放在最后。当 i<nimodn=0\prod_{i < n} i \bmod n=0 时无解。考虑如下构造:1×12×23×34×45×56××n2n1×n1 \times \frac12\times\frac23\times\frac34\times\frac45\times\frac56\times\dots\times\frac{n-2}{n-1}\times n。由于 1i\frac1imodn\bmod n 意义下两两不同,所以 11i1-\frac1i 也一定两两不同。
  • 把它和第一问关联一下。由于 nn 只有 2,4,p2, 4, p,因此找一个原根,对 gkg^k 做类似构造即可。

P3447 [POI 2006] KRY-Crystals\color{red}\text{P3447 [POI 2006] KRY-Crystals}

Problem
给定 nnm1..nm_{1..n}。求满足 0aimi0\le a_i\le m_iai=0\oplus a_i=0 的序列 aa 的个数。
n50,1mi2321n \le 50, 1 \le m_i \le 2^{32}-1
Sol
有一个 O(2nVpoly(n))O(2^nV\operatorname{poly}(n)) 的做法是从大到小考虑每一位,然后记录有没有顶到上界。
但是异或的性质非常好啊,你发现如果现在有一个上界是 11 或没有上界就可以剩下的位随便选,然后用这一个 11 来补。于是从高到低枚举 ii,表示第 i+132i+1\sim 32 位这些位都是满的。然后枚举这一位第一个没有填满的地方,让它作为调整位,记为 jj。则 1j11\sim j-1 的位置都是满的,它们在剩下的位数中的贡献即为它们的低位组成的数。对于一个 jj,需要统计 j+1nj+1\sim n 的位置异或和与前面相同的方案数(未填满的贡献是 2k2^k),这个显然需要进行一个 DP。令 fk,0/1f_{k, 0/1} 表示 knk\sim n 这些数的第 ii 位异或和为 0/10/1 的方案数。时间复杂度 O(nlogV)O(n\log V)

评论

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

正在加载评论...