Live2D

Solution Set -“似一捧细泉的奔逃”

Defining LATEX macros

0.「OurOJ #47912」优美的分配方案

  Private link & Submission (忘交了).

  给定含有 n 个点 m 条边的简单无向图 G, 将 1m 分配给 m 条边作为边权. 求所有前 n1 条边恰为 MST 的 G 的 MST 边权和之和.

  n20.


  • 「A.DP-计数 DP」「A.数学-组合计数」

  想看 GF 的可以散了, 都说了兔是组合意义选手. (

  不难转化成: 有 m 个空位 (权值) 排成一行, 要填入 m 个球 (边), 对于球 i[1,n), 有限制集合 Ri, 表示 Ri 内的所有球必须在 i 之后, 注意有 minRin. 求所有合法方案中, 前 n1 个球的位置标号和.

  先来想想怎么求合法方案数. 作为一个成熟的组合意义选手, 我们可以很快构造一个等价合法且不重不漏的放球规则. 令 f(S) 表示 [1,n) 内填了 S, [n,m] 内填了所有可填的数 (记为 RS) 的方案. 枚举一个 u 加入 S, 我们先将 u 填入最左侧的空位, 再随便选 RuRS 的位置即可. 因此

f(S{u})+(m|RS||S|1)!(m|RS{u}||S|1)!f(S).

  怎么表示权值呢? 作为一个成熟的组合意义选手, 我们首先发现 "标号和之和" 只有加法, 可以分开算贡献. 标号还是转化成方案更好算, 自然想到用特殊球标记球 i 前的一个位置, 就能将球 i 的标号转为方案. 具体地, 我们新增一个空位和一个特殊球. f(S,0/1) 标记特殊球是否被放置. 不涉及特殊球放置的转移是一样的:

f(S{u},0)+(m|RS||S|)!(m|RS{u}||S|)!f(S,0),f(S{u},1)+(m|RS||S|1)!(m|RS{u}||S|1)!f(S,1).

如果放特殊球, 规则为: 先将特殊球前置, 再将 u 前置, 最后乱选其他球. 此时特殊球会对 n1|S|i 贡献, 需要额外乘系数. 因而

f(S{u})+(m|RS||S|1)!(m|RS{u}||S|1)!(n1|S|)f(S,0).

  答案即 f(U,1). 复杂度 O(n2n).

1.「OurOJ #47927」海之女仆

  Private link & Submission.

  假设一个有重力的二维世界, x<1x>n 处是无穷高的山, x(i,i+1) 处下方有 hi 体积 (还是别叫面积, 有点怪) 的山, 山上有 di 体积的水. 求至少削掉多少体积的山头, 才能让所有水域连通. 求出答案下确界.

  数据组数 T10, n5×103 n105, 0di,hi103, 绝对精度要求 ϵ=104.


  • 「A.分治-二分答案」「B.贪心」「C.性质/结论」

  被 T1 卡了, 没发现 T2 不难, 走投无路把 T3 一眼了. () 不过锤标算的做法还是挺有意思的.

  显然最终海平面关于最小费用具有单调性, 可以二分海平面 H. 细节之处在于二分后的贪心.

  考虑最终山的状态: 左右原本就有未被水淹没的山, 我们一开始就能忽略它们; 左右还有一些山高于海平面, 它们肯定无法被淹没, 所以不必被削平, 只需要削出一个峡谷状的山脉 (即, 左边削成前缀最小值, 右边削成后缀最大值), 让水洼里的水流入海中; 除去这些山, 剩下的都是海底山脉, 把高出海平面的山恰好削到海平面即可. 这是削去体积最小的策略, 自然也是水量需求最小的策略. 我们只需要检查所有水能否填满海平面以下的空间即可.

  复杂度 O(Tnlog(hmax/ϵ)).

2.「OurOJ #47950」中档题

  Private link & Submission (忘记交 OJ, 现在交不了啦).

  给定序列 {an},{cn}, 生成一棵树, 对于 i[2,n], i 的父亲在 [1,i1] 中正比于 a 值随机生成, 边权为两端点 c 点权和. 询问 q 次两点距离期望. 答案模大素数.

  n,q106.


  • 「A.DP-概率/期望 DP」「A.数学-生成函数」

  兔是一个组合意义选手, 所以也许她写出来的题解巧妙了你一脸, 但她自己也得酝酿很久. (

  「方法一」 本来尝试常规思路, 枚举 LCA, 求形如 E(du)+E(dv)2E(dlca(u,v)) 的东西, 但是发现事件独立性的讨论挺烦人的, 我们不妨换个思路: 对 u,v 一起向 LCA 爬树的过程求解.

  不妨设 u<v, 注意到 v 在跳到 [1,u] 之前一定不会与 u 相遇, 且经过边权显然和 u 无挂. 方便起见, 我们只算路径上除 u,v 外的点权和期望. 记 sx=ixai, 对于 w(u,v), wv 的祖先的概率显然是 aw/sw. 因而 v 爬到 u 之前经过的点权期望为 w(u,v)awcw/sw. 令 g(u)=i=1uaici/si, 该期望即 g(v1)g(u).

  剩下的爬树过程? v 一定处于 "爬到 [1,u] 中某一点" 这个状态, 实际上只有 u 一个变量, 可以 DP 了. 令 f(u) 表示此时还需要经过的点权期望. 枚举 v 落在 [1,u] 中的位置, 可知

f(u)=1suv=1u1av(f(v)+g(u1)g(v)+cv).

中间的东西拆开求前缀和即可. 线性求逆元可以做到 O(n+q). (

  「方法二」 去问 crashed 他的做法的时候发现是原题, 然后找到了自己的题解 (大嘘). 这是求 LCA 的方法. 不知道为什么考场上觉得这个有问题, 大概是写错了?

  「方法三」 然后这个是 crashed 的方法, 可以看出兔和蛋的数学偏好差异. (

  还是算点权和, 不妨设 u<v. 令 Fw(z;u,v) 表示以 w 为 LCA 时, 路径出现概率关于其点权和的 GF. 那么

Fu(z)=ausv1i(u,v)(1+aisi1zci),

注意 ai 是上一步的分子, si1 是下一步的分母. 这里 w=u 是特殊情况, 当 w<u 时, (w,u) 直接的点既可以被 u 爬到, 也可以被 v 爬到, 所以要复杂一点:

Fw(z)=aw2zcwsu1sv1i(w,u)(1+2aisi1zci)i(u,v)(1+aisi1zci).

  最终答案即 w[1,u]Fi(1). 导一导算一算即可, 也是线性的.

3.「OurOJ #47933」坐标

  Private link & Submission.

  给定 nZ2 上的点 {(xi,yi)}, 构造正整数序列 {am} 和向量阵 {vn×m}, 要求 m40, vij{(0,1),(1,0),(0,1),(1,0)}, 且 (xi,yi)=jajvij.

  n103, |xi|,|yi|109.


  • 「A.构造」

  一道有意思的构造题, 不过 4lognm 这个实际上没有用的观察还是太迷惑人了.

  判无解: x+y 奇偶性不同则无解, 很显然.

  如果是在数轴上构造? 简单的想法是构造一列 2k, 然后让对每个点贪心地向 0 靠近. 不过这样的分别构造的思路很容易被否定: 220×220 容纳不了点的信息! (不过这个判断会被 4lognm 迷惑, 可恶啊).

  由此, 第一个 motivation: 同时构造两维坐标.

  不妨令 x,y0, 我们最终可以对它们进行一些加减, 最终让它们变为 0.

  再试试二进制构造? 我们很快发现, 因为不能让提供一个 bit 两次 (不然和分开构造没有区别), 则当 x,y 含有同一 bit 时, 将会很难处理.

  由此, 第二个 motivation: 保持 x,y 的 bit (或某一特定 bit) 不同时为 1.

  例如, 保持最高 bit 不同. 归纳地, 我们可以先用 230 作用于较大者, 并从 229 开始考虑. 设当前的 d=2k, |x||y|, 则我们对 x 操作, xdx (并不关心符号), 注意到此时低一位仍然满足条件. 特别地, 20 处需要用两个 20 调整. 最终至多使用 32 步完成构造. (如果要求 m32 说不定还简单一点.)

4.「OurOJ #47935」上升

  Private link & Submission.

  给定一棵含有 n 个结点的带点权树. 删除一个结点及其邻接边, 最小化在剩下的森林中, 所有简单路径对应点权序列的 LIS 长度最大值. 求出这一最小化的最大值.

  n5×105.


  • 「A.树论-长链剖分」「B.Tricks」

  考完给 Walking_Dead 传授正解, 突然发现这算是一个比较有意义的 trick.

  取出一条包含全局 LIS 的路径 (x,y), 显然, 最优删除位置在这条路径上.

  "枚举树上的点" "枚举路径上的点", 在遍历枚举点 u 的邻接连通块求答案时, 这个连通块一定是 x 为根时的某棵子树, 或者 y 为根时的某棵子树. 仅仅用这个性质, 我们就能规避换根, 而只需要求子树答案了.

  接下来的工作挺简单. 长剖, 维护子树内 LIS 末尾最小值和 LDS 末尾最大值, O(nlogn) 处理一次. 先以任意点为根求全局答案, 取出一个 x, 再以 x 为根求子树答案顺便取出一个 y, 最后以 y 为根求子树答案. 然后枚举 w 求最终结果即可. 复杂度 O(nlogn).

5.「OurOJ #47947」数划分

  Private link & Submission.

  给定序列 {an}, 求将 [1,n] 划分为连续不交区间的方案数, 使得每个划分区间 [l,r] 都有 mini=lr{ai}rl+1maxi=lr{ai}. 答案模大素数.

  n5×105.


  • 「A.分治-CDQ 分治」「A.启发式合并/分裂」

  题不难, 只是记录一下兔犯傻的过程.

  尝试序列 DP. 令 f(r) 表示划分 [1,r] 的方案数. 对于固定的 r, 枚举最后一个区间的左端点 l, 则其需要满足

( i[l,r], airl+1)( i[l,r], airl+1).

自然的想法是考察合法 l 的单调性. 分别考虑 i, ai>rl+1i, ai<rl+1 两种情况. 注意到当 l 不断减小时, 前者存在单调性而后者不存在. 怎么办呢?

  兔傻就傻在, 把 min/max 转化成 / 之后, 忘记了原本 "最值" 的可枚举性. 既然有一个东西不单调, 我们直接对这个条件启发式分裂做 CDQ 就行了. 这里就直接对区间最大值启发式分裂, 在跨中心转移时, 前一个条件可以枚举端点后二分, 后者仅仅是对转移端点进行一个常量的限制, 很好处理. 那么就 O(nlog2n) 无脑完成了. 当然, 存在 O(nlogn) 的解法.

6.「OurOJ #47954」数区间集

  Private link & Submission.

  给定序列 {an}, 求 |{{ai}i=lr}[l,r][1,n]|.

  n5×105, 保证任何一个数在 {an} 中出现不超过两次.


  • 「A.扫描线」「C.性质/结论」

  难点大概是设计一个去重策略, 除此之外都很清纯.

  对于 ai, 若 ai 在另一个位置 j 出现, 则令 pi=j, 否则令 pi=+. 我们首先计数这样的区间 [l,r]: pl1[l,r]pr+1[l,r], 也即使关于出现集合的极长区间. 扫描线轻松实现. 虽然这样算还是会重, 不过我们得到了一个重要的条件: 若极长区间 [l1,r1],[l2,r2] 出现集合相同, 则这两个区间不交且不邻, 证明显然.

  发现了这个性质, 后续对算重的区间的描述就变得清晰了. 对于极长的 [l1,r1], 若其被重复计数, 则必然满足 {pi}i=l1r1=[l2,r2], [l1,r1],[l2,r2] 不交不邻 (逆用结论), 且它仅在 [l2,r2] 处被算重一次. 对这种东西的维护实在是经典: 扫描 l, 在 r 处维护 maxi=lr{pi}mini=lr{pi}(rl), 线段树维护区间最小值和出现次数, 单调栈维护最值并对应地区间加减即可. 不邻的条件在最大值栈上二分一下就行.

  两部分复杂度都是 O(nlogn).

7.「CF 1770F」Koxia and Sequence

  Link & Submission.

  对所有 i=1nai=x, i=0nai=y ( 为按位或), 求 {an} 异或和的异或和.

  n<240, x<260, y<220.


  • 「A.数学-数学推导」「C.思维」

  精巧的转化! 这种步步手筋的题真的厉害.

  明显, "异或和" 指向奇偶性, 而方案数里必然涉及组合数, 它们共同指向 Lucas 定理. 这是破题关键.

  首先, 若枚举异或和的贡献 bit i, 要求 i 出现奇数次, 且方案数为奇数. 则出现次数 cmod2=1(nc)mod2=1. 所以 nmod2=0 时答案为 0. 以下考虑 nmod2=1 的情况… 先别急, 奇数 n 减去 1 就是偶数, 这意味着当 a1 固定时, 后续 a2..n 对答案的总贡献也为 0. 最终只需要考虑 nmod2=1a1 的贡献.

  现在, 摆在面前的有 ai=xai=y 两个限制. 相对来说, 后者是一个集合形式的要求, 方便容斥. 设 f(t) 表示 (ai)t ( 表示二进制表示下的子集关系) 时的答案, 就有

ans=ty(1)|y||t|f(t),

异或和, 位独立! 又有

ans=tyf(t),

t 是可枚举的, 我们只需要求出每个 f(t).

  列出式子:

f(t)=it2i(ai=x2i[a1(t2i)][a2t][ant]mod2).

(ab)mod2=1ab, 后者连乘是单纯的逻辑与, 前者连乘可是妇孺皆知的可算! 右向左变形, 代入得:

f(t)=it2i(ai=x2i(t2ia1)(ta2)(tan)mod2)=it2i((nt2ix2i)mod2)=it2i[(x2i)(nt2i)].

O(ylogy) 计算即可.

8.「洛谷 P5172」Sum

  Link & Submission.

  给定 Tn,r, 分别求出 d=1n(1)dr.

  T104, n109, r104.


  • 「A.数学-类欧几里得」「A.数学-数学推导」

  只考虑 r 非完全平方数的情况.

ans=d=1n(12(drmod2))=d=1n(12(dr2dr2)),

f(n,α)=i=1nαi, 则

ans=n2f(n,r)+4f(n,r/2).

  来推导 f, 有点类似类欧, 需要一点讨论. 当 α1 时,

f(n,α)=f(n,{α})+n(n+1)2α.

α<1 时:

f(n,α)=i=1αnj=1n[iαj]=i=1αnj=1n[i<αj](αQ)=i=1αnj=1n[iα<j]=nαni=1αniα.

不好办了. 为了让递归进行, 我们猜测恒有 α=ar+bc 的形式. 对 f(n,a,b,c) 继续化简:

nαnf(n,a,b,c)=i=1αniar+bc=i=1αnicar+b=i=1αnc(arb)ia2rb2=f(αn,ac,bc,a2rb2).

  综上呐,

f(n,a,b,c)={n(n+1)2α+f(n,a,bcα,c)α1,nαnf(αn,ac,bc,a2rb2)α<1.

复杂度是 O(Tlogn) 喵? 不太会算.

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