Live2D

Solution Set -「LOCAL」冲刺省选 Round XXXI

Summary

  前期节奏太懒散,后面发现 C 题是水题都没时间写,提起精神来啊!

  A 题卡得比较久,对线性基的理解不够深刻,思来想去半天才把转移系数调对。B 题也卡,走起来就想“怎么优化”而没有深入去研究“求的什么”。C 题哈哈哈哈倍增长剖一个个伪,最后祭了一发暴力,明明那么蠢(而且貌似才做过)的点分的说。

A 神必的集合

  给定 m 对形如 (xi,yi) 的限制,求 {0,1}n 里有多少个 S,满足 x,ySx+yS(加法即异或),且 S 里第 xi 大数是 yi

  n10m200


  按照兔子一贯的坏习惯,不区分二进制数和 {0,1}n 里的向量。

  我们只需要确定 S 的基 S 的数量,就能求出 S 的数量。对于 {y1..m} 的基 Y,显然有 span(Y)span(S)。另一方面,不妨把 SY 规范化作上三角,也就是异或线性基求出来的那玩意儿。

  考虑若 S 确定,比 y 小的数的数量 x1 是如何算出来的。方便起见,令 xx1,显然若 x 含有 bit 2k,就表明 S 从低到高第 k 个基向量的最高 bit 被 y 包含。据此,对于任意 i,j,我们能够判断 2i 能否作为 S 的从低到高 j 个基向量的最高 bit。

  据此,考虑 DP。令 f(i,j) 表示考虑了 bit 20..i,已经选择了前 j 小的基向量的方案数。当 Y 在这一维有基向量时,这个时候我们只能当然只能 Y 里对应位置上的基向量;否则,我们可以任意取 {0,1}i+1 里一个不与已有的 j 个基线性相关的向量来扩展基,也可以不把 i 选入基。形式化地,令 c2i 能否作为第 j 个基向量,那么

{f(i+1,j+1)+cf(i,j),y[2i+1,2i+2)Y{f(i+1,j+1)+cf(i,j)×2i+1jf(i+1,j)+f(i,j),otherwise

至少可以做到 O(n2+nm)

B 法阵

  给定 {an} 以及 q 次询问,每次给出 [l,r],求 max{ax+ay+azlx<y<zr,yxzy}

  n,q5×105


  注意到在固定 x 时,若有 x<y1<y2,且 ay1ay2,那么 y2x 配对必然不如 y1 优秀。因此,有效的 (x,y) 必然在从左到右单调栈时相遇(y 弹掉 x,或者 y 压入 x 的后面),这样的 (x,y)O(n) 对。

  既然 (x,y) 很少,我们就去维护 z。把询问离线下来挂到左段点上,从右到左扫描 l,对于每个 r,维护此时 x[l,r],z[l+2,r] 的答案。放在线段树上,每次更新差不多就是区间取 max,可以做到 O((n+q)logn)

C 旅行

  给定含有 n 个点 m 条边的无边权无向图,点 u 有属性 rucu,表示对于所有 dist(u,v)ru,可以从 u 花费 cu 的代价走到 v。求从 1 出发到每个点的最小花费。

  n2×105n1mn+50cu>0


  这个 m 范围的提示性太强了,随便拿一棵生成树,树内点分建图,树外边还是向点分一样处理跨过某个点的路径信息,记 t=mn+1,暴力做复杂度为 O(nlog2n+ntlognt),可以过。

  点分部分采用 two-pointers 建图,每次拿出 du+cu 最小的点,从上次指针划到的位置继续更新,不把图显式地建出来。可以做到 O(nlogn+nt)

posted @   Rainybunny  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示