Loading [MathJax]/jax/output/CommonHTML/autoload/multiline.js

Solution Set - 加训 CF!

加训一些 CF 题,这里写一些简要题解,可能是草稿。暂定只做 Div.1 的题。斜体的标题表示太菜了不会做。

CF1967


CF1967A

aiai 张写有 ii 的卡片和 kk 张空卡片,可以在每张空卡片上写 1n1n 的数字,然后把所有卡片排成一列。问最后的排列中最多有多少个子区间是 1,2,,n1,2,,n 的排列。n2105n2105


设有 xx 种卡片的出现次数最少,次数为 yy,则最大值是 nyx+1nyx+1。显然策略应该是每次写下一种当前最少的数。二分最后的最小值即可。

AC link.


CF1967B1

给定 n,mn,m,求有多少对 1an,1bm1an,1bm,满足 a+bbgcd(a,b)a+bbgcd(a,b)n,m2106n,m2106


gcd(a,b)=d,a=dx,b=dygcd(a,b)=d,a=dx,b=dy,则 dyx+ydyx+yyxyx,而 (x,y)=1(x,y)=1,所以 y=1y=1,也就有 baba。进一步,ab(modb2)ab(modb2)。于是直接枚举 bb 计算即可。

AC link.


CF1967B2

给定 n,mn,m,求有多少对 1an,1bm1an,1bm,满足 bgcd(a,b)a+bbgcd(a,b)a+bn,m2106n,m2106


gcd(a,b)=d,a=dx,b=dygcd(a,b)=d,a=dx,b=dy,则 x+ydyx+ydy。约掉右边的 yy,可以发现 x+ydx+yd,则 x,yx+ydx,yx+yd。那么 xn,ymxn,ym。直接枚举 x,yx,y,根据 dd 的范围计算即可。复杂度就是 O(nm)O(nm)

AC link.


CF1967C

将一个数组变成它求树状数组 mod998244353mod998244353 之后的结果,称为一次变换。给定一个长为 nn 的数组进行 kk 次变换之后的结果,构造原数组。n2105n2105


考虑初始数组中的第 ii 个数对各个位置的贡献,会发现贡献到 ii+lowbit(i)ii+lowbit(i) 这样一条链上,每次可以沿着这条链走任意多步。那么贡献到走 mm 步之后的方案数等价于 kk 个非负整数和为 mm 的方案数,也就是 Cmm+k1Cmm+k1。那么直接枚举点对点的贡献即可,预处理组合数后,复杂度是 O(nlogn)O(nlogn) 的。

AC link.


CF1967D

给定一个 [1,m][1,m] 内长为 nn 的数列 aa,和一个 [1,m][1,m] 内长为 mm 的序列 bb。每次可以选择一个集合 SS,然后对所有 iSiS,将 aiai 变为 baibai。求至少要多少次操作才能使序列 aa 单调不减,或报告无解。n,m106n,m106


显然 ibiibi 构成一个内向树森林,问题可以重新叙述为:每个数 aiai 可以在这个森林上走若干步,求使得 aa 单调不减时,操作次数最大值的最小值。考虑二分答案,维护一个指针表示上一个数的最小值,不断尝试增加,那问题就转化为判断从 uuxx 步是否会经过 vv。这只要对基环树做一些基本的处理就可以了。

AC link.

CF1967E1,E2

给定 n,m,b0n,m,b0,考虑所有在 [1,m][1,m] 内,长为 nn 的序列 a1,,ana1,,an,求有多少个这样的序列 aa,使得存在一个非负整数序列 bb,使得对 1in1in,有 biai,|bibi1|=1biai,|bibi1|=1。E1 n,m,k2105n,m,k2105,E2 n,m,k107n,m,k107

考虑固定的 aa 如何构造 bb。显然的贪心策略是让每个 bb 都尽可能的大。那么就可以设 dpi,jdpi,j 表示按照上述方法构造出的 bi=jbi=j 的方案数。转移是 dpi1,jdpi,j1,(m1)dpi1,jdpi,j+1dpi1,jdpi,j1,(m1)dpi1,jdpi,j+1,答案是 ni=1dpi,mmni+mj=0dpn,jni=1dpi,mmni+mj=0dpn,j。这样暴力的复杂度是 O(nm)O(nm) 的。

这个 DP 是格路计数的形式。观察一下模型,要从 (0,b0)(0,b0) 开始走,每次往右上方走一步或者往右下方走一步,求(除端点)不经过 y=1y=1y=my=m 到达 (n,m)(n,m)(n,<m)(n,<m) 的方案数。那么这就是一个反射容斥的模型,可以旋转 45\degree45\degree 后平移转化为反射容斥的模板。我们总共有 n+mn+mnn 步的反射容斥,复杂度就是 O(n2m+m)O(n2m+m)。可以结合前面的暴力进行根号分治,通过 E1。

继续优化这个容斥。用 XX 表示碰到直线 y=my=mYY 表示碰到直线 y=1y=1,需要统计的就是碰撞序列为空或者以 XX 开头的路径。考虑路径终点在 (n,x)(n,x) 的方案,如果不考虑其他限制,路径数目是 C(xb+n)/2nC(xb+n)/2n。然后反射容斥,注意 x0x0x<0x<0 的容斥是不同的, 前者可以写成 f()f(Y)+f(XY)f(YXY)+f()f(Y)+f(XY)f(YXY)+,后者则写成 f(X)f(YX)+f(XYX)f(X)f(YX)+f(XYX)

我们将 00 的点和 <0<0 的点分别放在一起容斥,会发现每次对称后都是一段连续的 CknCkn,所以用差分统计每个 CknCkn 的系数 ckck 即可。这里的修改是对某个区间 [l,r][l,r],给 cici 增加 (m1)i+d(m1)i+d ,因为要考虑往右上走一步的系数是 m1m1,而在反射过程中系数是不变的。考虑差分 ci(m1)ci1ci(m1)ci1 ,然后就做到线性了,最终通过 E2。

代码参考了官方题解。

AC link


F 题就不做了。


全局总评:这场是打了的。题目还不错,A,B1,B2,C 是简单题,同时能看出一定层次;D 做法好像平凡但其实没有那么好想;E 是相当有趣的题目。


CF1965


CF1965A

nn 堆石子,每次选择一个不超过最小非空堆大小的正整数 kk,从每一堆中移走 kk 个石子。变成博弈,两个人轮流操作,不能操作者(面对 nn 个空堆)判负。问谁有必胜策略。n2105n2105


首先相同大小的堆是没有用的。只有一个堆是必败态;两个堆时,较小的一个大小为 11 是必败态,>1>1 是必胜态;三个堆 x<y<zx<y<z 时,如果 yx=1yx=1,那么是必胜态;否则,如果 x=1x=1,是必败态;如果 x>1x>1,是必胜态。不妨模拟,如果最小堆大小为 11 就不断操作下去,如果不为 11 或只有一堆就必胜。

AC link


CF1965B

构造一个长度不超过 2525 的非负整数序列 aa,使得 aa 没有子序列和为 kk,且有子序列和为 v,vn,vkv,vn,vk

可以证明一定有解。n106n106


扣掉 kk 的最高二进制位 2b2b,给出其它位,那就只差所有含有这个位的数需要被构造。给出 k2bk2b,满足了这个位上不超过 kk 的部分。给出 k+1k+1,满足了这个位上超过 kk 的部分。给出 k+2b+1k+2b+1,满足了这个位上等于 kk 的部分。

AC link


CF1965C

给定一个 0101 串,将它的每一位依次写在一个纸带上。可以在任意位置翻折。一组翻折是合法的,如果同一个位置的字符相同,注意只在完成翻折之后检查。求最小长度。n2105n2105


刻画最终的纸带:假装有一个光标,扫描整个序列,遇到一个字符可以左移光标或者右移光标。如果经过的位置已经存在字符,则两个字符需要相等;如果经过的位置不存在字符,则添加这个字符。

最终的序列一定是 0101 交替。那么直接贪心就可以了。

AC link


CF1965D

给定一个大小为 n(n+1)21n(n+1)21 的可重集,请求出一个回文序列,使得它的所有区间和构成的可重集包含给定集合。保证有解。3n10003n1000


考虑回文串中那些独特的和,也就是那些关于中心对称的区间。这些区间的和是互不相同(严格递增)的,于是只有这 k=[n+12]k=[n+12] 个和出现奇数次,其余和都出现偶数次。用 map 找出给定集合中的所有出现奇数次的和,这种和的数目是 k1k1k+1k+1

如果是 k1k1,先按照这些和构造出长度为 n2n2 的序列,然后要把某个数拆成两个,或者在两端再增加一个数。把当前所有区间和从 map 中减去,找到剩下来的最大值,这个最大值一定是一个后半段的前缀和,暴力找到它应该在的位置即可。

如果是 k+1k+1,先尝试按照这些和构造出长度为 n+2n+2 的序列,可能因为奇偶性而不成功。如果不成功,只有唯一一个数奇偶性不同,直接把它删掉。如果成功了,要合并某两个相邻的数。同样的把当前所有区间和从 map 中减去,会多减掉一些,同样找到多减掉的最大的区间和,一定是一个后半段的前缀和。找到它的位置,把这个数删掉就可以了。

AC link


CF1965E

n×mn×m 个单位立方体落在空间内 (1,1,1)(1,1,1)(n,m,1)(n,m,1) 的范围内,每个单位立方体染了 kk 中颜色之一。现在要在空间内再放置一些单位立方体,满足每个立方体的三维坐标都是不超过 106106 的正整数,使得同种立方体构成一个连通块。构造一种使用不超过 41054105 个立方体的方案,或判断无解。n,m,k50n,m,k50


人类智慧题。考虑先把立方体分开一些,那么就往上拉,让每两行之间空出一行。接着在各个高度的空行放上不同的颜色,就连通了所有颜色。当然这只是简要思路。估计没几个人看得懂吧。

AC link


CF1965F

现在要举办一场会议,会议的每一天需要有一位学者作报告,且一位学者不能报告两次。有 nn 位学者,第 ii 位学者只能在第 liliriri 天作报告。如果连续的若干天中每一天都能有学者作报告,那么就可以在这些日子举办会议。对 k=1,2,,nk=1,2,,n,求有多少种选择 kk 天举办会议的方案。n,li,ri2105n,li,ri2105


对于固定的一段时间,判定问题可以看作是二分图匹配,每个学者和每一天分别看作左部和右部的点,学者向它能作报告的天连边。一段时间合法当且仅当取出对应的右部点和所有左部点时,最大匹配是右部的完美匹配。

可以使用 Hall 定理检查。需要满足,对任何 xx 个右部点,与它们中至少一个相邻的左部点都有 xx 个。应该如何取这 xx 个右部点?只考虑连续区间大概是不对的。举例而言,3/1 3/2 2/2 23/1 3/2 2/2 2 是一个 hack,考虑 1,31,3 两个右部点会发现不合法,但是连续区间都是合法的。

考虑打补丁。假设左部两个学者对应的左端点是一样的,设它们的区间分别为 [a,b],[a,c],bc[a,b],[a,c],bc。此时,如果将 [a,c][a,c] 换成 [a+1,c][a+1,c],答案不会变化。可以这样理解:检查一段时间除了最大匹配,也可以直接贪心,从左到右考虑每一天,给每一天选择可选的中右端点最小的一个。那么 [a,b],[a,c][a,b],[a,c] 会在第 aa 天同时加入,一定先选择 [a,b][a,b],就可以把 [a,c][a,c] 放到下一天再加入。

这样优化之后,所有区间的左端点就互不相同了。那么它有什么用?回到 Hall 定理,此时我们可以证明只考虑连续区间即可。假设有一个集合 TT 不合法且不连续,我们把中间缺失的部分都补上,仍然是不合法的。只考虑一个局部,如果原来 TT 中连续两个元素是 x,yx,y,把 x+1y1x+1y1 补上,新产生的相邻点只能是 [x+1,y1][x+1,y1] 的子区间,而每个左端点只有一个区间,所以增加的邻点数目不超过增加的点数。

还可以再简单一些!我们把前面的优化倒过来再做一次,所有区间的右端点也互不相同了。此时,用 Hall 定理的判定只需要检查整个时间区间。因为如果一个连续区间不合法,把区间的右端点或左端点扩展 11,同样只会增加一个区间。优化可以用一个堆完成,最后再用一个双指针计算就可以了。复杂度 O(nlogn)O(nlogn)

AC link.


全局简评:B,D,E 都是构造题,其中 B,E 是人类智慧,D 是细节分析。A,C 是比较平凡的简单题。F 是真正的好题。


CF1943

CF1943A

给定一个长为 nn 的序列 aa。Alice 和 Bob 进行博弈,他们初始有一个空序列 cc,Alice 每次操作选一个 aa 中元素加入 cc 并从 aa 中删掉它,Bob 每次操作选一个 aa 中元素从 aa 中删掉。Alice 先手。Alice 的目标是最大化 mex(c)mex(c),Bob 的目标则是将其最小化。假设两人都足够聪明,求最终的 mexmexn2105n2105


简单的观察:如果 xx 不出现,则答案不超过 xx;如果 x<yx<y 都只出现一次,则答案不超过 yy

假设 0,1,,y10,1,,y1 中只有 xx 的出现次数为 11,其余都至少为 22,那么 Alice 先手取到 xx,此后如果 Bob 取到 <y<y 的某个数,Alice 就可以取另一个这个数。这样 mex(c)mex(c) 至少就是 yy。所以上述两条的较小值就是答案。

AC link


CF1943B

一个字符串 tt 被称为kk好,如果它存在至少一个长为 kk 的子串不是回文串。设 f(t)f(t) 表示使得 ttkk好的 kk 的总和。给定长为 nn 的字符串 ssqq 次询问 l,rl,r,求 f(slsr)f(slsr)n,q2105n,q2105


注意到kk好这个条件是非常弱的,或者说不是kk好这个条件非常强。假设 tt 不是 kk好的。先考虑 k=t1k=t1,手玩一下会得到:kk 为奇数时,所有奇偶性相同的位置都相同;kk 为偶数时,所有位置都相同。所以当且仅当 tt 是全相同时,偶数 kk 不是kk好;当且仅当 tt 不是两种字符交替时,奇数 k>1k>1 不是kk好。注意 k=1k=1k=|t|k=|t| 要特判。然后就随便做了。

AC link.


CF1943C

给定一棵 nn 个点的树,初始所有点均为白色。每一次操作可以选择一个点 vv 和一个数 d[0,n1]d[0,n1],把所有距离 vv 等于 dd 的点 uu 染为黑色。构造一种方案,用最小次数的操作将所有点染黑。n2103n2103


考虑一条长为 mm 的链应该怎么做。观察所有奇数位置的点和所有偶数位置的点,每一次操作最多将两个奇偶性相同的点染为黑色。所以 m=2k+1m=2k+1 时需要 k+1k+1 步,m=4km=4k 时需要 2k2k 步,m=4k+2m=4k+2 时需要 2k+22k+2 步。让所有操作都在链的中点或中间两个点上进行,然后直接拍到直径上就可以了。

AC link.


CF1943D1,D2

一个长为 mm 的非负整数数列被称为好的,当且仅当 bb 可以通过有限次下述操作变成全为 00:选择两个下标 l,r(1l<rm)l,r(1l<rm),对所有满足 lirlirii,将 bibi 减掉 11。给定 n,kn,k 和质数 pp,求 (k+1)n(k+1)n[0,k][0,k] 内长为 nn 的数列有多少个是好的。答案对 pp 取模。D1 kn400kn400,D2 kn3000kn3000


当然考虑如何刻画“好的”数列。显然如果有 ai>ai1+ai+1ai>ai1+ai+1 则不合法。这个条件是否充要呢?归纳易证是的。

那有一个暴力的 DP:dpi,j,kdpi,j,k 表示 ai=j,ai1=kai=j,ai1=k 的方案数。转移是 dpi1,k,kjdpi,j,kdpi1,k,kjdpi,j,k。前缀和优化一下可以做到 O(n3)O(n3)

如何优化?考虑容斥。如果位置 i1,i2,,isi1,i2,,is 不合法,也就是 aij>aij1+aij+1aij>aij1+aij+1。那么不会有连续两个位置同时不合法。可以分成各个连续段考虑。如果 2,4,,2s2,4,,2s 不合法,那么 2s+12s+1 个项有多少个取法?可以直接 DP,fi,jfi,j 表示 2i12i1 这个位置取 jj 的方案数。转移是 (kxy)fi,xfi+1,y(kxy)fi,xfi+1,y,要求 x<kyx<ky。那么计算一下 xfi,xxfi,x 的前缀和与 fi,xfi,x 的前缀和即可。

这样之后,设 dpidpi 表示考虑前 ii 项,第 ii 项不合法的容斥系数。转移就是枚举连续段,设当前连续段为 [j,i][j,i],那么 j1,j2j1,j2 都合法,于是有 (f(ij)/2,x)kjs3dpsj3dpi(f(ij)/2,x)kjs3dpsj3dpi。注意端点情况需要特判一下。同样用前缀和优化,然后就 O(n2)O(n2) 了。

AC link.


CF1943E1,E2

给定一个长为 nn 的序列 aa。Alice 和 Bob 博弈,他们初始有一个空序列 cc,Alice 每次操作选择一个 aa 中的元素加入 cc 中并从 aa 中将其删去,Bob 每次操作选择至多 kkaa 中元素删去。Alice 先手。Alice 的目标是最大化 mex(c)mex(c),Bob 则是将其最小化。假设两人都足够聪明,求最终的 mex(c)mex(c)

序列用 m+1m+1 个正整数 f0,f1,,fmf0,f1,,fm 给出,表示有 fifiii

E1 m50,m1000m50,m1000,E2 m,m2105m,m2105k,fi109k,fi109


考虑是否有 ansiansi。Alice 的策略是选择 <i<i 的,还未选择的数中,出现次数最小的一个。那么将所有 fj<ifj<i 从小到大排序。

注意到 Bob 没有必要改变 ff 的顺序:将每次删 kk 个变为 kk 次删 11 个,那么仅当 fx=fyfx=fy 时选择靠后的一个会改变顺序,但是可以选择靠前的一个。

如果 Bob 获胜,枚举 Alice 取不到的元素。Bob 的策略就是在不改变顺序的前提下尽可能地减少这个元素的次数。二分答案,然后直接模拟这个过程,复杂度大概是 O(m3logm)O(m3logm),可以通过 E1。

考虑如何优化这个过程。观察到,如果 Bob 为了保证顺序不变而减少 Alice 下一步删除的数,就说明剩下的数都几乎相等了(差不超过 11)。这个时候可以计算出一个 Bob 能赢的总和上界。而此前的部分双方互不影响,是容易计算的。

具体的,假设 ff 排序之后得到 a1,a2,,ana1,a2,,an,并且 Bob 选定 anan。我们要找到最大的 ii,使得 Alice 删除 a1,a2,,aia1,a2,,ai 的时候,它们都没有被减少过,也就是说 nj=i+1(ajai)(i1)knj=i+1(ajai)(i1)kii 对这个条件显然是具有两段性的。相应地有 nj=i+2(ajai+1)<iknj=i+2(ajai+1)<ik,也就是删除 i+1i+1 之前已经减少到了所有数差不超过 11,就可以用预处理的结果 O(1)O(1) 判断了。实际上因为要考虑多个 nnii 是可以双指针求的。

预处理的部分,就是假设 ni=1ai=sni=1ai=saiai 的极差不超过 11,求 Bob 能够在 anan 上获胜的最小的 ss。其实就很简单,可以递归计算,设 s(n1)=q(n1)+rs(n1)=q(n1)+r,那么第一步被删除的大小就是 qq,于是 s(n)=qn+r+ks(n)=qn+r+k。初始值是 s(2)=2ks(2)=2k。这样之后复杂度被优化到 O(mlog2m)O(mlog2m),瓶颈在二分后的排序,足以通过 E2。E2 比 E1 还好写

AC link


F 太抽象了,看不懂。


全局简评:ABC三个简单题好像不太对,缺乏层次感。D是 classical 的 DP。E 是非常好的博弈题,难度不算太高。F 有点牛了。


CF1936

CF1936A

交互题。交互库有一个 0,1,,n10,1,,n1 的排列 p0,,pn1p0,,pn1。可以做的询问是给出四个下标 a,b,c,da,b,c,d,交互库返回 papbpapbpcpdpcpd (按位或)的大小关系。请用不超过 3n3n 次询问找到两个下标 i,ji,j 使得 pipjpipj 最大(按位异或)。n104n104,交互库不是自适应的。


nn 的最小 22 的幂是 2m2m,则最大值当然就是 2m12m1

首先 n1n1 次操作找到 pi=n1pi=n1。然后来找 2mn2mn

那么找到所有 pjpipjpi 是最大值的 jj,再在这些 pjpj 里面找到最小值。3n3n 次足矣。

AC link


CF1936B

一排 nn 个格子,第 ii 个格子写有 >< 之一的字符 sisi。一个小球在某个格子中。如果小球所在的格子写有 <,那么它花费一秒移动到左边的相邻格子,否则移动到右边。移动之后这个格子的字符翻转。对 i=1,2,,ni=1,2,,n,求初始在第 ii 个格子的小球需要多少时间离开这一排格子。n5105n5105


如果位置 ii 初始是 <,设 ii 左边的 > 从右到左下标依次是 a1,,asa1,,as,右边的 < 从左到右依次是 b1,,btb1,,bt

  • 如果 stst,那么球从左边跑出去,时间是 (ia1)+(b1a1)+(b1a2)++(bsas)+bs(ia1)+(b1a1)+(b1a2)++(bsas)+bs,化简一下就是 2si=1bi2si=1ai+i2si=1bi2si=1ai+i
  • 如果 s>ts>t,那么球从右边跑出去,时间是 (ia1)+(b1a1)++(btat+1)+(nat+1)(ia1)+(b1a1)++(btat+1)+(nat+1),化简后是 2ti=1bi2t+1i=1ai+n+i2ti=1bi2t+1i=1ai+n+i

初始是 > 的部分 reverse 一下就可以了。那么只用开两棵线段树维护一下这两个东西就可以了。

AC link.


CF1936C

nn 只神奇宝贝,每只神奇宝贝有 mm 个属性,第 ii 只的第 jj 个属性记为 ai,jai,j。现在有一个决斗场,初始时第 11 只神奇宝贝在场上。你可以以任意顺序做任意次如下两种操作之一:

  • 选择 i[1,n],j[1,m],k>0i[1,n],j[1,m],k>0,将 ai,jai,j 增加 kk,代价为 kk
  • 选择 i[1,n],j[1,m]i[1,n],j[1,m],让第 ii 只神奇宝贝以第 jj 种属性与当前场上的神奇宝贝决斗。该属性数值更大的一方将胜出,胜者留在场上。该操作的代价为 cici

求让第 nn 只神奇宝贝(作为胜者)留在场上的最小代价。2n,nm4105,1ai,j,ci1092n,nm4105,1ai,j,ci109


显然每一次决斗都会把一只新的神奇宝贝推上场。设推上场的编号依次是 b0=1,b1,,bt=nb0=1,b1,,bt=n,那么在决斗之前,我们会让下一只的某个属性增加一些以使它获胜。这个增加量当然就是 max(0,min(abi1,jabi,j))max(0,min(abi1,jabi,j))。然后就可以以此建图跑最短路,uuvv 连边权为 cv+max(0,min(au,jav,j))cv+max(0,min(au,jav,j)) 的边。这样直接做,复杂度是 O(n2logn)O(n2logn) 的。

考虑拆点,点 uu 拆成 mm 个点 (u,j)(u,j)。从 (u,j)(u,j)(v,j)(v,j) 连边,边权为 max(0,au,jav,j)max(0,au,jav,j)。再放一个中转点 uu,从 (u,j)(u,j)uu 连边 00,从 uu(u,j)(u,j) 连边 cucu。上面的连边就只需要在排序后相邻的 au,jau,jav,jav,j 之间连边了。复杂度 O(nmlog(nm))O(nmlog(nm))。图的点数是 n(m+1)n(m+1),边数是 2(n1)m+2nm2(n1)m+2nm

AC link。怎么难度 A>B>C 的啊。


CF1936D

给定两个长为 nn 的序列 a,ba,b 和一个固定的整数 vv。一个区间被称为好的,当 blbl+1brvblbl+1brv(按位或)。这个区间的价值是 max(al,al+1,,ar)max(al,al+1,,ar)。现有 qq 次以下两类操作之一:

  • 给定 i,xi,x,将 bibi 修改为 xx
  • 给定 l,rl,r,求 [l,r][l,r] 好的子区间中的最小价值。如果不存在输出 11

n,q2105n,q2105ai,bi,v109ai,bi,v109


直接上线段树。对每个区间,除了记录其好的子区间的最小价值,还要记录前缀按位或和后缀或的情况。这里总共只有 O(logV)O(logV) 种情况,所以暴力记录就可以了。merge 的部分是容易的。复杂度是两只 loglog

[AC link](Submission #261989366 - Codeforces).


CF1936E

给定一个长为 nn 的排列 pp,计数满足下面条件的,长为 nn 的排列 qq:对任何 1i<n1i<nmax(q1,q2,,qi)max(p1,p2,,pi)max(q1,q2,,qi)max(p1,p2,,pi)。答案对 998244353998244353 取模。n2105n2105


dpi,jdpi,j 表示已经确定前 ii 位,当前的最大值为 jj

dpi,jdpi+1,k,kjdpi,jdpi+1,k,kj(ji)dpi,jdpi+1,j(ji)dpi,jdpi+1,j。和 maxp1imaxp1i 相等的位置不转移。这样轻松做到 O(n2)O(n2)

但是这个东西看起来很没有前途。

考虑容斥。dpidpi 表示前 i1i1 个前缀最大值都不同,第 ii 个前缀最大值相同的方案数。

maxij=1pj=simaxij=1pj=si。总数是 Ci1si1i!=i(si1)!(sii)!Ci1si1i!=i(si1)!(sii)!。容斥掉第一次相同在 jj 出现的方案数。如果 sj=sisj=si,则这 ijij 个位置有 (sij)!(sii)!(sij)!(sii)! 种方案,否则有 Cij1sij1(ij)!=(ij)(sij1)!(sii)!Cij1sij1(ij)!=(ij)(sij1)!(sii)! 种。这样也是 O(n2)O(n2)

pipi 表示最小的 jj,使得 sj=sisj=si。 经过一些转化得到

dpi=i(si1)!(sii)!i1j=1((sij)!(sii)!(sij1)!(sii1)!)dpji1j=pi(sjj1)!(sii1)!dpjdpi=i(si1)!(sii)!i1j=1((sij)!(sii)!(sij1)!(sii1)!)dpji1j=pi(sjj1)!(sii1)!dpj

第一项不用管,最后一项可以简单前缀和优化,中间的项用分治 NTT 解决。复杂度两只 loglog

AC link


F 怎么是计算几何啊?难过。


全局简评:感觉难度 D>A>E>B>C,但是 D 可能又是我蠢了。太抽象了。题目都比较平凡吧。


CF1924

CF1924A

给定一个字符串 ss 和两个整数 n,kn,k。判断是否所有由前 kk 个小写字母构成的,长为 nn 的字符串都是 ss 的某个子序列。如果不是,找到一个不满足条件的字符串。1n,k26,|s|103,m,n1061n,k26,|s|103,m,n106


贪心地找:第一次出现最晚的字符;在此之后第一次出现最晚的字符;以此类推。如果能找到的长度 nn 那么就满足条件,否则不满足。

AC link


CF1924B

一个序列上有 nn 个点,点 xixi 上放置着 vivi 这个数。位置 pp 的权值是 pp 左边(含)第一个数乘以 pp 到右边(含)第一个数的距离,也就是说放有数的位置权值是 00。现在有 qq 次两类操作之一,或者在某个还没有放置数的位置放一个数,或者询问一段区间的权值之和。n,q3105,1xin,1vi107n,q3105,1xin,1vi107。保证初始时在 1,n1,n 位置有数。


用一个 set 维护所有数,用一个线段树维护每个数右边的部分的和。剩下的操作都是 trivial 的。

AC link


CF1924C

一张正方形的纸,每一次操作把四个角折到中心点,得到一个新的正方形。进行 nn 次操作后展开,求凸出来的折痕长度之和与凹进去的折痕长度之和的比值。答案可以表示成 A+B2,A,BQA+B2,A,BQ,输出 BB999999893999999893 取模的结果。n109n109


nn 次操作,凹进去的长度和为 pnpn,凸出来的长度和为 qnqn。列出递推式:

pn=22+22(pn1+qn1),qn=22(pn1+qn1)pn+qn=22+2(pn1+qn1)pn+qn=((2)n1)(4+22)pnqn=22qnpn=((2)n1)(4+22)22((2)n1)(4+22)+22=((2)n1)(2+1)1((2)n1)(2+1)+1=(2)n+1+(2)n22(2)n+1+(2)n2=12(2)n+1+(2)n2n=2k,22k2+2k2=2((2k1)22k)2(2k1)2+22k,B=2k122k1(2k1)2n=2k+1,22k+1+2k22=2((2k1)2+2k+1)2(2k1)2+22k+2,B=2k122k+1(2k1)2

然后直接算就完了。

AC link

神秘的模数原来是为了保证分母一定有逆元吗,他温我哭。


CF1924D

求有多少个由 n 个左括号,m 个右括号组成的序列,其最长的合法括号子序列长度恰为 2k。答案对 109+7 取模。n,m,k2000,T3000


一个合法的括号序列可以分成若干段,每一段也都是合法的括号序列

这些段之间构成若干个缝隙,这些缝隙内就可以插入剩下的括号,必须先插左括号再插右括号

设分为 j 段,长为 2i 的合法括号序列有 fi,j 个,有 O(n3) 的简单递推

fi,j=i1t=j1ft,j1fit,1,fi,1=(2i2)!i!(i1)!

发现 fi,j=fi+1,j+1fi+1,j+2,然后就 O(n2) 了。可以找到组合意义。

单次询问是 O(n) 的,设 n1=nk,m1=mk,则答案是 ki=1fk,iCn1+m11i+n1+m1

AC link


CF1924E

初始有一张 n×m 的网格纸。每一次等概率选择一条平行于边界的格线,将纸片剪开,然后留下左下方的一片。求使得留下纸片的面积严格小于 k 的期望操作次数。答案对 109+7 取模。

1n,m106,2k1012,T57000


根据期望的线性性,只用计算每条直线被选择的概率。考虑所有网格线的一个排列表示顺序,那么 x=i 被选择但不是最后一个被选,当且仅当 x=1,2,,i1y=1,2,,k1i 都在这条直线后面。特别地,如果要求所有 y 都在它后面,那么可以确定如果选择了这条线,就一定是最后一条,所以跳过。预处理逆元之后 O(n+m)

AC link


CF1924F

交互题。一个长为 n 的序列,n1 个位置为 1,剩下一个位置为 0。每次可以询问一个区间 [l,r],交互库会返回 rlrl+1 之一。保证交互库不会连续三次返回询问区间的和,或者连续三次不返回询问区间的和。请使用不超过 log1.116n1 次询问,给出一个大小不超过 2 的集合,其中包含了 0 的位置。

T2048,n105。交互库是自适应的。


考虑把整个序列分为三块 A,B,C。按照如下操作询问:

  • 询问 AB,询问 A
  • 如果前两次询问回答相同,询问 ABC,可以直接确定 AC 之一是没有 0 的。
  • 如果前两次询问回答不同,再询问 AB。如果和第一次回答相同,那么可以确定 B 是没有 0 的。
  • 如果第三次和第一次回答不同,再询问 ABC,可以确定 AC 之一是没有 0 的。

回答指的是 0 是否在区间内。这样就用 4 次操作把三块分成了两块。

然后考虑一个合适的分比,令 |A|:|B|:|C|=x:12x:x。可能会使用 3 步变成 2x,或 4 步变成 1x。于是选择 (2x)4=(1x)3 的解 x。更精确一些可以 DP,转移点在 0.36 附近。

AC link.


全局简评:有点难评。感觉质量很差,是目前为止见过质量最差的一场。

posted @   by_chance  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示