注意,本博客的任何内容不应被滥用、随意转载。

2026.8 HIGH

CF1868C Travel Plan

只考虑一条长为 \(i\) 的路径 \(p\) 本身,显然 \(\max_p=x\) 的赋值方案数为 \(m^{n-i}(x^i-(x-1)^i)\)

出于期望的线性性,只要求出 \(h_i\) 表示树中有几条长度为 \(i\) 的路径,然后加权求和。

完全二叉树的特性是,允许在每个点上把问题拆成一个满二叉树和另一个完全二叉树。那么,从 \(n\) 开始向上跳,每一步会外接一个深度为 \(d\) 的满二叉树。

预处理出 \(g_{i,j}\) 表示深度为 \(i\) 的满二叉树中长度为 \(j\) 的路径个数。编写函数 \(F(i,j)\) 表示 \(i\) 个点的完全二叉树深度为 \(j\) 的点个数。现在合并、为 \(h\) 转移变得容易。

复杂度是 \(\Theta(\log^3 n+m\log n)\)

CF1242C Sum Balance

如果 \(sum\) 不是 \(k\) 的倍数,无解。一个盒子和应为 \(\dfrac{sum}k\)

\(k\) 个数重新排列,考虑置换环。

保证所有 \(a_{i,j}\) 互不相同,暗示对每个数建点。那么,一个点 \(x\) 如果被从 \(i\) 盒取出,必须有一个点 \(y\) 补入 \(i\) 盒。\(y\) 被唯一确定:\(\dfrac{sum}k-(s_i-w_x)=w_y\)。连边 \(x\to y\),形成鸡环树森林。

现在,取出若干个环覆盖所有盒子。状压 dp 即可。

ABC461G Graph Problem 2026

现在,假定你已经知道这个定理:在这样一个线性规划问题里,\(W\in\{0,1013,2026\}\)

把一个点的贡献拆成左右部点,并且认为当右部点有贡献时必有左部点贡献,限制转为两条边 \((x,y+n),(y,x+n)\)。这意味着 \(x,y\) 总共只能产生 \(2\times 1013\) 的贡献;同时有右部点贡献时,翻转并认为合法。

现在希望求出二分图最大独立集 \(s\)。求最大匹配 \(t\) 后答案是 \(1013(2n-t)\)

ABC214G Three Permutations

首先,按 \(p\) 重排。问题是:求排列 \(r\) 使 \(r_i\not=q_i,i\) 的方案数。

容斥。先确定一些非法位置,其余 dp 完成后用数学方法计算。考虑 \(r_i=q_i\land q_i\not=i\)\(i\) 是红色,\(r_i=i\)\(i\) 是蓝色,否则黑色。可以见得,在 \(q\) 的置换环上红色后面不能跟蓝色。

此外没有别的限制了。由于是在环上 dp,需要先枚举开头颜色。处理出 \(g_{i,j}\) 表示长度为 \(i\) 的环上有 \(j\) 个黑点的方案数。卷积即可。

ARC093D Dark Horse

现在,把满二叉树画出来:

image

交换左右儿子使左下角是 \(1\),后面乘一个 \(2^n\)。要求填数,但 \(A_i\) 不能是任何一个上图三角形中的 \(\min\)

容斥。由于钦定 \(A_i\) 是三角形 \(j\) 中的 \(\min\) 需要选出一些 \(>A_i\) 的数,从大到小填入 \(A\)\(f_{i,S}\) 表示填入 \(A_{[i,m]}\) 后上图已被钦定非法的三角形集合为 \(S\) 的方案数。转移:\(f_{i,S}\to f_{i+1,S}\)\((2^j)!\binom{2^n-A_i-S}{2^j-1}f_{i,S}\to f_{i+1,S\cup j}\)。也就是未被钦定的所有数中另选 \(2^j-1\) 个到三角形 \(j\) 中排。

最后把剩下的数算上。

ABC469G K-nacci Operations

维护一个指针 \((A,B)\),表示最终答案为从 \(A,A+1\) 的空隙开始以 \(B=\pm1\) 为方向遍历整个串。一个简单的想法是求出 \(a_i,b_i\) 表示 \(S_i\) 对答案的影响。但是,如果使用矩阵转移,\(\prod b\) 是不可维护的。

因此,\(b\) 成为思路瓶颈。但实际上,\(b\) 的形式过于简单以致于它存在一个周期 \(K+1\)。容易证明。所以,如果在向量中记录最近的 \(K\)\(a\),只有 \(K+1\) 种不同的转移矩阵。转移类似 \(a'_K=\sum\limits_{i=1}^K a_i\prod\limits_{j=i+1}^Kb_j\)

所以可以用结合律 \(K+1\) 项一轮地转移,余数暴力。复杂度 \(\Theta(K^3\log n)\)

AT_utpc2025_k Keep or Gamble

首先,\(P\) 的值没有用。然后,冷静地想清楚最优决策是什么。

在所谓最优期望中,线性性照常使用。答案是 \(\sum P(x)C(x)\),分别表示到达局面 \(x\) 的概率和下一步的期望贡献。

在这题里,可以写成这样:\(\sum\limits_{0\le i\le U,0\le j\le T} \dfrac{\binom{U}{i}\binom{T}{j}}{\binom{U+T+C}{i+j}}\max(0,\dfrac{2(U-i)+(T-j)-C(2i+j)}{U-i+T-j+C})\),这是因为:每次抽牌,要么亏完,要么下一步的期望降低。一旦下一步期望亏损,立刻停止。如果感到奇怪,接受。现在拥有 \(\Theta(n^2)\) 做法。

出于 \(\max\) 内部的简单形式,可以尝试拆开。改为枚举 \(t=i+j\)\(j\)。考察发现单调性存在。现在的任务是对每个 \(t\)\(j\) 作为一段后缀的某个带组合数式子的和。题解已经说明双指针解决方法,其中与组合数关联的单项递推很重要。

Q6798 字符串理论

这里有一个经典方法:枚举 \(L|n\),将字符串每 \(L\) 位分割一次。一个长度为 \(kL\) 的串总是经过 \(k\) 个分割点。

image

枚举 \(i\le \frac nL\),钦定这是合法串经过的最后一个分割点,那么 \(((i-k+1)L,iL]\) 中间的每一段首先都应相同。这是在把循环串看作一个环。

然后,考虑两端的不完整段。按图中所示求出绿色的 \(\operatorname{lcp}=x\) 和蓝色的 \(\operatorname{lcs}=y\),合法子串 \(s_{[l,r]}\) 的限制有:\(l>(i-k)L,r\le(i+1)L,r-iL\le x,(i-k+1)L-l\le y\),简单统计。

以上过程使用哈希容易完成。

P6717 [CCO 2018] Boring Lectures

转换成求 \(\max\limits_{0<|i-j|<K}a_i+a_j\)一个应该探查的思路是线段树分治。对于操作 \((i,x)\) 直接单点修改,撤回时单点修改为 \(0\)。用线段树维护区间最大值,在单点修改的位置上求周围最大值更新答案。

这道题记载在这里,可能有人会说太水了。不过拥有如此短的题面和题解,写了又怎样?

P11759 [COTS 2014] 基因转换 / GTA

这样的题目存在经典思路:操作组装、中间状态、暴力诈骗。

这道题需要一些感觉。题目允许的操作怎么看都相当强——实际上,任何串都可被缩小到长度 \(\le4\)。换成另一个容易通过暴力猜到的说法,即任意长度为 \(5\) 的串都能缩短。

考虑将输入全部随意缩短到长度 \(\le4\),然后暴力搜索连通性。这里需要设置一个搜索中间状态的串长上限,可以设置到时空限制所允许的极限,实际上设置为 \(8\) 即正确。

P14190 [ICPC 2024 Hangzhou R] Dividing Sequence

最大值最小,考虑二分……好吧,依次确定每一位就是二分了。

依字典序比较的极端性考察答案结构:\(B\) 不是 \(C\) 的前缀,必有 \(B<C\),把后面的所有数接给 \(B\) 即可使答案为 \(C\)。因此,当确定了答案的一个前缀 \(D_{[1,m]}\),有意义的状态应满足 \(B\)\(C\) 的前缀、\(C\)\(D_{[1,m]}\) 的前缀。

\(f_{i,j}(2j\ge i)\) 表示在 \(A_{[1,i]}\) 中取出子序列 \(B,C\) 使得 \(B\)\(C\) 的前缀且 \(|C|=j\) 是否可能。现在需要确定 \(D_{m+1}\)、求出 \(f_{i,m+1}\) 并保证其中至少一个是 \(1\)。根据转移 \(f_{i,m}\overset{D_{m+1}=A_{i+1}}\to f_{i+1,m+1}\)\(f_{i,m}\overset{D_{i-m+1}=A_{i+1}}\to f_{i+1,m}\),贪心可知 \(D_{m+1}=\min\limits_{f_{i,m}=1} A_{i+1}\)

按位确定并跟随转移,直到 \(f_{n,m}=1\) 为止。

P9655 『GROI-R2』 Beside You

Key of key of key of key observation: )匹配的(已经确定。用一个括号栈模拟求出每个)点对应的(点,记为 \(p_u\)。现在,根据括号串的构造方法可以类似构造树上答案。

考虑 \((A)\) 的形式,对于根 \(rt\),包含 \(rt\) 和满足 \(p_u=rt\) 的所有点的最小连通块唯一合法,其大小计算方法是经典的,设为 \(f_{rt}\)。考虑 \(AB\) 的形式,我们可以从 \(p_u=rt\) 的所有 \(u\) 下方继续拼接 \(\sum\limits_{v\in \operatorname{son}(u)}f_v\),算连通块大小时计入答案。

P12734 理解

\(t_u=\min(t_u,r_u)\)

一个想法是设 \(f_{u,i}\) 表示访问 \(u\) 后剩余 \(i\) 个空间的子树最小代价。这是可行的:在完成一个子树的途中跳去另一个子树没有任何意义;允许子树比 \(u\) 本身更早完成。其中 \(f_{u,1}\) 特别表示不访问 \(u\) 的子树代价。

转移:\(f_{u,1}=\sum \min(r_v+f_{v,k},f_{v,1}+[\text{v是关键点}]r_v)\)\(f_{u,i}(i>1)=\sum \min(t_v+f_{v,i-1},r_v+f_{v,k},f_{v,1}+[\text{v是关键点}]t_v)\)\(\min\) 中分别表示在保存 \(u\) 时进入 \(v\)、在访问 \(u\) 前完成 \(v\) 的子树、不直接访问 \(v\) 的代价。特别地,允许一个子树用 \(t_v+f_{v,i}\) 转移,因为可以忘记 \(u\) 一次,该转移可以反悔完成。

答案是 \(f_{0,1}\)

P9247 [集训队互测 2018] 完美的队列

对于一个操作 \((l_i,r_i,x_i)\),它的生效(全局至少存有一个该操作加入的元素)时间被表示为区间。一个思路是对每一类颜色分开计数。考虑一类颜色 \(col\) 的出现时间实际上是满足 \(x=col\) 的全部操作生效时间并。

现在来为操作 \(i\) 求出首次失效时刻 \(rig_i\)若将一次操作拆成若干个,总失效时刻是它们的最大值。因此,将操作放在线段树上,现在为这 \(m\log n\) 个操作求 \(rig\)。同时记录一下 \(bl_i\) 表示 \(i\) 操作在拆分前所属的操作。

想想,操作 \(i\) 失效可以被这样描述:将 \((i,rig_i]\) 中的所有操作视为执行区间 \(-1\) 后,\(\max\limits_{j\in[l_i,r_i]}a_j\le 0\)

在操作线段树上搜索,设 \(p_u\) 表示节点 \(u\) 的子树内所有操作按时间排序的序列,可以通过归并 \(p_{ls},p_{rs}\) 得到。如果在归并时发现两个操作 \(bl\) 相等就将它们合并,那么 \(\sum|p|=m\log n\),即线段树拆分中访问的节点数

用线段树可以处理子树内影响,祖先操作的影响可以用树状数组简单表出。为 \(u\) 上原有操作求 \(rig\) 时,由于操作区间相同可以双指针,配合判定即可。略有细节。

注意求生效时间并不要像我一样莫名其妙用奇怪算法。

P5271 OwenOwl 不学车也不删库

这是一个构造题。考虑分治,分治结构大概是分成 \(p\) 层,分别解决后,考虑将层与层之间相连。

现在考虑第 \(i\) 层第 \(x\) 个点和第 \(j>i\) 层第 \(y\) 个点,它们之间必须连接恰好一条边。由于 \(p\) 是质数,可以向取模方向考虑。可以发现的是 \(j-i\) 一定有逆元,故求出步长 \(d\equiv\dfrac{y-x}{j-i}\pmod {p^{k-1}}\),随后唯一确定一个第 \(0\) 层的点 \(x-id\bmod p^{k-1}\)

因此,对于任意步长和起点 \(d,s\in[0,p^{k-1})\),向下走 \(p-1\) 步,每步向右循环走 \(d\) 的距离,随后将经过的 \(p\) 个点取出。由以上分析可知每条边恰好连接一次。

P6631 [ZJOI2020] 序列

这才是真正的贪心啊。

首先,操作二三可以被认为是从任意位置开始隔一位减一下。

然后,开始感觉。首先两类操作(直线、跳线)没有顺序之分。然后,考虑从左向右归纳式推进,即依次考虑在 \(i\) 上开始或结束的操作区间。

假设 \([1,i-1)\) 被处理完毕,那么重要的变量有三个:\(A,B,C\) 分别表示能够经过 \(i\) 的直线、跳线和不能经过 \(i\) 的跳线个数。分类讨论。

\(a_i\ge A+B\),令 \(a_i\) 减去 \(A+B\) 即可,所有操作可以被保留。否则,一些操作不可以经过 \(i\),考虑抛弃。这些操作的个数是 \(A+B-a_i\),记为 \(K\)。一个反悔贪心的办法是对 \(A,B,a_i\) 都减去 \(K\)(如果存在 \(A<K\),可知 \(B\) 实际上至少减去 \(K-A\),类似地容易调整到 \(A,B,a_i\ge K\)),然后如常进行。

接下来,优先使用 \(\min(a_{i-1},a_i)\) 次直线,随后从 \(i-1\) 开始 \(a_{i-1}\) 条跳线。从 \(i\) 成功推进到 \(i+1\)

等等,前面还有 \(K\) 次操作剩余。令 \(a_i\) 加上 \(K\)\(ans\) 减去 \(K\),即允许紧接着 \(i\) 开始 \(K\) 次免费操作。

注意交换 \(B,C\)

posted @ 2026-08-14 16:18  Sheez  阅读(12)  评论(0)    收藏  举报
要想见证尘封的秘密,就要承受最严厉的惩罚。