【省选模拟】口胡

4.5

虚数之树

点分树维护路径,每个点开线段树维护编号区间(其实平衡树更好)

因为是求最短路径,有重叠一定不优,因此不用考虑去除点分树子树贡献

叮叮车

本质上是求 maxx=lr,x+x7 进制下进位次数

l,r LCP 下一位为第 i 位,暴力是枚举 ji,将 r[i]1,低位全填 6,可以通过。考虑贪心,找到从 i 开始的最长能进位连续段,j 为段内最低位(若 j=0 则答案就是 r

没有找到类似贪心,不过应该是对的(假了的话请在评论区告知)

4.4

俩构造一交互有点东西

交互

交互次数 2n 很有提示性,考虑笛卡尔树建树。使用单调栈维护右链,加入点 i 时栈内必然存在相邻点 u,v 满足 ls(i)=vi 在栈中的上一个元素是 u

剩下的问题是找到这个 u。不难发现此时 u 的子树不满而 v 的满了,据此判断是否继续弹栈即可

构图

考虑枚举 deg=k 的点数 x,那么剩下 nx 个点的度数和为 max(kx,(k+1)(nx)))(需要把 剩下 nx 个点的度数和 kx 补成偶数)

得到 x 后肯定是把这 kx 度数均分给 nx 个点最优,随便模拟一下即可。瓶颈在于输出方案。

4.1

tree

st 的链拎出来,记做 v1vk,预处理 a[i] 表示从 vi 出发不经过 vi1,vi+1 的最长路

一个错误想法是枚举 s 走到哪,然后 t 的最优决策即为后缀 max,取得分差的 max 为答案。问题在于 s,t 是轮流走的,若 s 走过了中点到 vit 一定会选择走到 vi 来迫使 s 提前拐弯

s,t 都在链上,只可能是 (vi,vki+1)(vi+1,vki+1),否则可以 O(1) 计算答案,因此状态数是 O(n) 的。考虑搜索,以轮到 s 走为例,dfs(i,j) 计算 (vi,vj) 的答案,s 要么拐弯 a[i]max{a[k]+jk} 要么向中间走 1+dfs(i+1,j),递归下去即可。需要维护 mx[j]=a[k]+jk,在 (i+1,j) 的基础上对 ai+1+j(i+1)max 即可

treecnt

3.26

答案 = 开灯数 相邻两个都开着的灯对数

根号分治。预处理任两大颜色之间的相邻灯对数,维护每个大颜色与多少个开着的小颜色邻,O(nn)

可以加强到树上

密室逃脱

发现人的移动是可逆的,因此最终局面一定形成若干连通块,每个连通块中分成若干小段,每小段中至少有若干人,其余人可以随意移动,所以能到达每个房间的人数是固定的

f[i,j] 为第 i 个房间恰好有 j 人时前 i 个房间最多有多少人,同时要求 i 所在连通块中可以移动的人全在 i,因此不存在从 i+1 移动到 i 的情况。转移:

  • j<aif[i,j]+kf[i+1,k](k<bi)ii+1 不连通);f[i,j]+bif[i,j+bi]i+1 增加 bi 个人开门)
  • aij<ai+bif[i,j]f[i+1,jai](留下 ai 个人开门)
  • jai+bif[i,j]f[i+1,j](全过去了)

数组第二维需要开到 2×104,因为这么多人一定能走到 0。时间复杂度 O(nm)

3.22

启程的日子

不妨令 n<m,实现上若 n>mswap(n,m) 并标记,使用 write 函数输出一个矩阵,在该函数中判断是否有标记

可以粗略地构造出 =3 的方案:

  • +:第一列为 1,后面奇数行为 1,偶数行为原矩阵
  • +:第 m 列为 1,前面偶数行为 1,奇数行为原矩阵
  • :第一列、第 m 列为原矩阵取反,其余为 1

然后考虑需要特判的情况:

  • ans=0:原矩阵中不存在 1,但题目没有明确说明
  • ans=1:原矩阵只有一个含 1 连通块
  • ans=2:一定可以由相减得到。枚举原矩阵的极大 0 连通块作为减掉的矩阵,看该连通块是否与所有 1 连通块连通即可
  • n=1:构造失效,答案显然是 min( 1 连通块数 , 0 连通块数 +1)
  • n=m=2:构造失效,但 ans2,所以不需要特判

3.21

Board Game

O(nm2nm) 暴力:高维前缀和求出终止状态,然后博弈 DP

两部分转移类似,只考虑第一部分。设 g[s] 为 状态 s 是否是终止状态,其取值只有 0,1,可以把前 nm6 位相同的压到一个 ull 里:g[s] = f[s>>6] & 1<<(s&63)

f[s] 内部转移:枚举第 i 位,取出该位为 0 的位置集合 p[i],该位为 1 的位置集合即为 p[i]<<if[s] |= (f[s]&p[i]) << iO(6×(26+2nm6))
f[s] 之间转移:O((nm6)2nm6) 暴力高维前缀和

Function Query

不妨令 x<y。首先 f 在递归过程中 x+y,gcd(x,y) 为定值,所以 f(x,y)=f(xgcd(x,y),ygcd(x,y))。之后 xy,且 gcd(2x,yx)=2(若 gcd 存在 >2 的质因子 d,那么 d|x,d|(yx)d|y,与 xy 矛盾),再次除以 gcd 得到 f(x,y)=f(x,yx2),每次和除以 2,直到 x=y=1 或死循环(初始 x+y 不为 2 的次幂)

总结一下,若 x+ygcd(x,y)=2k,则 f(x,y)=k;否则 f(x,y)=0a 为排列,可以枚举 xx 的奇约数 d,取 y=2kdx。当且仅当 d=gcd(x,y)2i(2i|gcd(x,y),2i+1gcd(x,y)) 时会枚举一次 y 且从 y 也可以枚举到 x

上述枚举过程时 O(nlog2n) 的,不过只有不满 O(nlogn) 对合法的 (x,y),直接做二维偏序即可

3.20

fwx,gjy,pyt

数据结构

要求最浅的带权重心,该点子树的权值和一定 12 总权值。用 DFS 序把数拍到序列上,序列的带权中心一定在树的带权重心子树内,向上倍增寻找即可

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