Summary
名副其实的 trash round,希望以后没有了。
A 题算好,确实一个比较关键的简化状态的点没想到,所以只拿了暴力(不考虑 O(n4) 能操过更多分的情况,明明 O(n4) 和 O(2n) 是一档的。)
B 题签到,C 题倍增 + 分治 NTT 你开 106 我确实 😓,要不是 105 分多我甚至懒得写。
Solution
A− Good
给定 {an},{wn},每次可以在 {an} 中删去一个先升再降相邻差 1 的子串,删去长度为 l 的子串的收益为 wl。求经过任意次操作获得的最大收益。
n≤400。
联系 n 的范围猜测是区间 DP,所以先莽一个 f(l,r):把 al..r 删干净的最大收益(求出 f 之后可以再 DP 一下求答案)。注意“子串”成为“子序列”,能够划分子问题,所以自然想到转移时去讨论 al 被怎样的操作删除。
这一点比较巧妙,也算是一个“删子串”转移的 trick:如果删除 al 时没有一起删除 ar,那么 al..r 本身就能分成两段独立转移,所以我们只需要考虑 al 和 ar 一起被删掉的操作。
接下来就简单了。定义 g(l,r) 表示从 al 出发升序删子序列删到 ar 所划分出的子问题 f 的最大和;h(l,r) 则为降序删子序列。那么
f(l,r)=maxi∈[l,r){f(l,i)+f(i+1,r)}+maxi∈[l,r]{g(l,i)+h(i,r)+w2ai−al−ar+1},g(l,r)=maxi∈[l,r),ai+1=ar{g(l,i)+f(i+1,r−1)},h(l,r)=maxi∈(l,r],ai+1=al{f(l+1,i−1)+h(i,r)}.
O(n3) 转移即可。
B− Color
给定含有 n 个点 m 条边的连通无向图,结点 u 有颜色 cu。每次修改一个结点的颜色,修改后求出异色结点间的最短路。
n≤2×105,m≤3×105,边权非负。
显然最短路一定是一条边;显然只有 MST 上的边有用;显然可以 O(qlogn) 在树上做。
C− Music
给定 {vn},求序列 S={sn} 的个数,使得 1≤si≤vi,且 S 没有 border。
n≤106,vi≤vi+1。
注意 vi≤vi+1 这个限制告诉我们,对于 S 的任意一个 |S|/2 以内的前缀,我们可以让它成为 border。所以不难设计出基于此的暴力 DP,令 f(i) 表示仅考虑 s1..i 的答案,pi=∏ij=1vj,那么
f(i)=pi−i/2∑j=1f(j)pj⋅pi−j.
发现这是一个很像卷积的东西,但是它要求 p(x)⋅q(x) 时,p 取出的 x 指数不小于 q 取出的 x 指数。从分治乘法的角度考虑,显然所有左端点不为 1 的区间无法内部转移,所以分治实质上是一个倍增。随便写写画画可以设计这样一个倍增方法:

我们想要求 f 的灰色部分;红线是当前的中点,橙线是右半部分的中点。黄色连线可以直接卷,蓝色连线递归处理做上文提及的特殊卷积。特殊卷积的复杂度 T(n)=O(nlogn)+2T(n/2)=O(nlog2n),总复杂度 F(n)=T(n)+F(n/2)=O(nlog2n)。这个 106 带俩 log 跑多项式?我的笔记本也是超神只用 0.7s 跑大样例,总之这就是正解,我也想问候出题人。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!