3月CF杂题

Codeforces Round 853 (Div. 2)

打的 VP。

E. Serval and Music Game

妙妙题。枚举 x,思考如何快速计算 f(x) 的值。

对于 xsn 因数的情况,有 snx=snx=snx。令 k=snx,则 si=(pi+qi)k,相当是求 si 里面有几个是 k 的倍数。记 ti=gcd(si,sn),因为 k 一定是 sn 的因数,也要是 si 的因数,那么 k 一定是 ti 的因数,可以转化成求有几个 tik 的倍数。根据定义可知 tisn 的因数,考虑枚举 sn 的因数来计算答案。这种情况最多出现 sn 次,每次枚举是 sn 的,总时间复杂度 O(sn),预处理 gcdO(nlogsn)(应该可以基于值域快速预处理)。

对于 x 不是 sn 因数的情况,有 snx+1=snx。令 k=snx,则 si=(pi+qi)k+qi。此时有一个重要的性质:一个数 si 不能被表示出来当且仅当 simodk>sik。证明如下:假如一个数 simodk>sik,那么有 qimodk=simodk>siksik+1qi,矛盾;假如已经有 simodksik,可以这样构造:qi=simodk,pi=sik?qi

所以我们可以通过减去 [1,k1],[k+2,2k1][(i1)k+i,ik1][(k2)k+(k1),(k1)k1] 这些区间内的数来计算 f(x)。可以证明这样是 O(sn) 的:当 ksn 时,区间至多会有 k1 个;当 k>sn 时,snksn,故区间不会超过 sn 个。而不管是哪种情况,k 的取值都不会超过 sn 种,故总时间复杂度为 O(sn)

F. Serval and Brain Power

妙妙题 +1。

k5 的情况,我们把整个序列分成 5 段,那么 T 一定是至少一段的子序列(不懂可以手玩一下)。枚举每一段的子序列,查找 S 内包含个数,时间复杂度 O(5×2|S|5×|S|)。对于 k<5 的情况,我们只用考虑 k=2k=3(因为 k=4 包含在 k=2 里面)。枚举断点把 S 分成 k 段,对这 k 段求 LCS 即可。k=3 时时间复杂度为 O(w×|S|5),其中 w 是一个极小的常数。

证明一下 w 的大小。考虑以下问题:求排列 n 个白色球和 5 个黑色球的方案数。白球表示字符串的字母,第 2、4 个黑球表示我们将字符串分成 3 部分的位置,第1、3、5个黑球表示我们在 DP 中枚举转移的位置。因此,在球的顺序和所有 DP 状态之间有一个映射。球的顺序数为 (n+55),因此 w=5!=1120(实际上我们还没有计算分割成空串的情况,所以 w 甚至比这个小一点)。

Codeforces Round 857 (Div. 2)

md ,忍不了了,一拳把像马奇诺防线一样坚固的 pretest 打爆。

图片来源:我也不知道。

C. The Very Beautiful Blanket

题意:让你构造一个 n×m 的矩阵,满足矩阵内不同元素数量最多,且对于其任意一个 4×4 的子矩阵 a,满足:

a1,1a1,2a2,1a2,2=a3,3a3,4a4,3a4,4

a1,3a1,4a2,3a2,4=a3,1a3,2a4,1a4,2

n,m200

瞪眼可得最多种类为 n×m。有一种简单的构造方式:ai,j=i×232+j

E. Music Festival

题意:有 n 个数组,第 i 个里面有 ki 个元素。现在让你把 n 个数组以任意顺序连接起来,使得得到的新数组价值最大。定义长度为 m 的数组 a 的价值为 i=1m(ai>maxj=1i1aj)n,ki2×105

定义 limi 表示 maxj=1kiai,j,显然我们这样可以使得到的价值最大:先按 limi 从小到大排序,再从中选取一些数组连接,最后把其余的放到最后。因为你任意排列得到的答案中,有贡献的子结构一定会在这样构造的方案中出现。注意这里我们只是确定了会产生贡献的数组的相对顺序,并不是答案一定是这样排列的。比如这种情况:

定义 fi 表示当前选择的结尾为第 i 个数组的最大贡献,有转移方程 fi=maxj=1ki(maxl=1i1fl+cnti,j),其中 cnti,j 等于 x=jki(ai,x>maxy=1x1ai,y)。显然最大值可以线段树维护。

upd:傻逼了,这个直接记一个前缀最大值就行了,根本不需要线段树。

F. The way home

题意:给一个有向图,每条边需要一定的钱。你可以在第 i 个点卖艺来赚取 wi 块钱。初始在节点 1,身上有 p 块钱,要去往节点 n,求最小卖艺次数。n800,m3000,p,wi109

因为卖艺没有次数限制,我们卖艺一定是在沿途 w 最大的地方。定义 fi,j 表示从 1 走到 i,且沿路经过的 w 最大的节点为 j 的最少卖艺次数和最大剩余钱数。从 1 跑一遍 dijkstra ,如果去下一个点的钱不够就在 j 卖艺。记得更新 j 的值(注意我们应该先卖艺再更新,因为你的钱还不够到达下一个点)。

Codeforces Round 858 (Div. 2)

VP 罚时吃饱饱。

C. Sequence Master

题意:给定一个长为 2n 的数列 a,你需要构造一个长为 2n 的数列 b(正负没有限制),满足把 b 任意分成大小为 n 的两组,都有其中一组的乘积等于另一组的和。求最小的 i=12n|aibi|

手玩可以发现只有如下情况:

  • 全是 0;

  • n=1 时全为一个数;

  • n=2 时全为 2;

  • n 为偶数时有一个 n2n1 个 -1。

D. DSU Master

题意是最大障碍。

题意:

E. Tree Master

题意:一棵大小为 n 的树,i 的点权为 aiq 次询问,给定 (x,y),求 i=0dxapx,iapy,i,其中 dx 表示 x 的深度,px,i 表示 xi 级祖先,保证 dx=dyn,q,ai105

暴力怎么做?直接模拟这个过程。直接记忆化需要 map 或 hash,会被卡,考虑随机记忆化一部分答案。我的方法是只记录 x 是 400 倍数的 (x,y) 的答案,题解是只记录满足与 (x,y) 同样深度的点数不超过 n 的点对的答案。

Educational Codeforces Round 145 (Rated for Div. 2)

si+1 打成 si1,罚时吃饱饱。

D. Binary String Sorting

题意:给一个 01 串,有两个操作:花 1012 的代价交换相邻两数,花 1012+1 的代价删除一个数。求让这个串单调不减的最小代价。n3×105

最后的序列是一个前 0 后 1 的形式,考虑枚举 01 分界点,交换产生的位移至多为 1(因为大于 1 时不如删),且两边的多余的数肯定是直接删最划算。故枚举是否交换,答案直接算。复杂度 O(n)

E. Two Tanks

题意:有两个容量为 a,b,初始水量为 c,d 的水箱,有 n 次形如从一个往另一个倒水的操作,求对于所有的 0ca,0db,求出操作后第一个水箱中剩的水量。n104,a,b103。注:假设现在两水箱分别有 x,y 的水,当次操作为“从 1 向 2 倒 z 的水”,则实际倒水量为 min(x,by,z)

因为水不会溢出,考虑枚举 s 表示水的总量。发现对于一些 c=i,d=si 的情况,假如它们在某次操作后 1 被倒空或倒满,则最后答案相同,故显然对于所有 c+d=sc,d,答案画成函数是这样的:

其中 L,R 表示 1 中水量的上下界,lb,rb 是函数的分界点,它们可以直接模拟过程计算。时间复杂度 O(n(a+b))

F. Traveling in Berland

题意:n 个点的环,从 i(i+1)modn+1 耗油 ai,单位价格为 bi,油箱容量为 k,初始为空,求每个点作为起点和终点的最小代价。n2×105,aik,1bi2

Codeforces Round 861 (Div. 2)

C. Unlucky Numbers

题意:定义一个数的幸运值为其最大的一位数码与最小的之差。求 [l,r] 里最不幸的数。l,r1018

如果 l,r 数位不同,则一定可以取到幸运值为 0;反之,考虑枚举幸运值和每位数的取值范围,类似数位 dp 那样求一下即可。

D. Petya, Petya, Petr, and Palindromes

题意:定义数组的代价为使其变成回文串的最小改动次数,求数列 a 的所有长度为 k 的子串的代价。n,k,ai2×105k 是奇数。

正难则反。对于 i<j(i,j) 不会产生代价当且仅当 {ai=ajij(mod2)ji+1kk+12i+j2nk+12+1,可以直接计算。

E1. Minibuses on Venus (easy version)

题意:一个长度为 nai[0,k1] 的数组 a 是好的当且仅当存在 i 满足 aij=1jinaj(modk),求有多少个长度为 n 的好的 a 数组,答案对质数 m 取模。n1000,k30,108m109+7

条件等价于 2aij=1naj(modk),枚举 ai 和总和的值,定义 fi,j,0/1 表示前 i 位和为 j,是否用了 ai 的值,答案就是 fn,j,1。时间复杂度 O(nk3)

posted @   xx019  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示