20241021-1031杂题记录

gym105173I

题意:长度为 n 的序列,1aik。如果 [i,i+k1]k 阶排列,则这个区间所有位置都是好的。

求所有位置都是好的的序列数量,n105,k103

实际上是用若干个排列去覆盖整个序列。

fi 表示前缀 i 中最后一个完整排列以 i 结尾的方案数。

枚举上一个完整排列的结尾:

fi=j=1kfij×gj

gj 是在 1k 的排列后面接上 j 个数,满足 [j+1,j+k] 是排列,1l<j, [l+1,l+k] 不是排列的方案数。

总方案为 j!,现在减掉不合法的,枚举第一个不合法的位置 l

gj=j!l=1j1gl×(jl)!

时间复杂度 O(nk)submission

gym105173L

题意:求操作序列个数,使得 () 能变为合法括号序列 A,每次可以:

  1. 在序列最右边添加一对括号,即 SS()
  2. 选取合法区间 [l,r],使 S[l,r](S[l,r])

(......) 能被加入当且仅当其范围内所有 () 已被加入。

换句话说,他能加入当且仅当 k 已被加入,其中 k 为范围内最后一个 () 的标号。

这能够推出,第 i() 能被加入当且仅当 i1 已被加入。

() 数量为 m,不妨先排出操作序列 1,2,,m

从后往前考虑(这保证了 ki 是单调不升的)每个 (.......) ,在 ki 后面选一个位置插入,系数容易计算。

时间复杂度 O(n)submission

P10091 [ROIR 2022 Day 2] 分数排序

单组询问显然可以二分,a,b 都提前排序后存在一定单调性,能做到 O(n) check。

时间复杂度 O((n+q)logn),需要考虑精度问题。

submission

P10092 [ROIR 2022 Day 2] 网络系统升级计划

fu,i 表示以 u 为根的子树中,与儿子相连的边选了 i 条,能选的最大边数,同时记录边权和 gu,i

根据选不选 (u,v,w) 有两种转移:fu,ifu,i1+fv,i+w, fu,ifu,i+fv,i

fv,k 只能第二种转移到 fu,时间复杂度 O(nk)

注意到对 u 而言 fv 只有 i=ki<k 两种,因此空间可以做到线性。

submission

P10093 [ROIR 2022 Day 2] 礼物

题意:删除 [l,r] 中的前 k 大值,最大化剩余元素和,1n2×105,0kmin(100,n)

相同值的元素之间存在不确定性,规定先删大再删小,值相等的先删下标大的。

枚举 i,设辅助数组 {b},其中 bj=[i,j 在同一区间时 j 比 i 先删除]bi=1

i 被第 k 个删除当且仅当 [l,r] 恰好包含 k1

只关心 [l,r] 最左最右 1 的位置 [l,r],这样合法区间数减少到 O(k)

prei,nxti 表示 i 前/后第一个 1 的位置,答案即:

(prel,l) 的最大后缀和+(j=lrbj×aj)+(r,nxtr) 的最大前缀和

中间移项容易在枚举 [l,r]O(1) 维护。

查询某一区间的最大前缀/后缀和可以 ST 表做到 O(nlogn) 预处理 O(1) 询问。

从大到小在值域上扫描,链表维护每个 1 的前驱后继,时间复杂度 O(nlogn+nk)

submission

P10087 [ROIR 2022 Day 1] 跳跃机器人

fi 表示从 i 出发的答案。

不难得到,f1=max(d1,d21,d32,)

考虑 fi 需要满足的必要条件:

  • fidi
  • fi+1fi+1

两个条件同时成立就是充分的,即 fi=max(di,fi+11)

这样就在 O(n) 时间内递推出所有 f

submission

P11088 [ROI 2021 Day 1] 穿孔卡片

从上往下放置每个卡片。

卡片可以放置当且仅当其未被挡住且不为空的位置与答案串相同。

把当前卡片的矛盾位置(没被挡住且与答案不同)视为其度数。

能被加入当且仅当其度数为 0,写一个拓扑排序状物即可。

subsmission

P10089 [ROIR 2022 Day 1] 回文数组

哈希的结果是可加的,设正串的哈希值为 h,反串为 h

那么两部分合法当且仅当 ha+hb=ha+hb,移项即 haha=hbhb

当长度确定时不同的 hh 只有 O(n) 个,把他丢进桶里 check 即可。

如果奇偶性确定,答案是可二分的,时间复杂度 O(nlogn),需要双哈希。

submission

CF568E(加强)

题意:给出一个不完整排列 {a}ai=0 表示不确定。补全剩余位置并最大化 LIS。

钦定某些原先位置保留在 LIS 当中,形如 {ap1,ap2,,apk}

现在要在 pipi+1 当中为 0 的位置插入一些 x,必须满足 api<x<api+1

对于每个 ix 的值域互不相交,可以对此进行 DP。

fi 表示保留 ai 且以 i 结尾的 LIS 长度,从某个 j<iaj<ai 转移:

fi1+fj+min((j,i) 当中 0 的个数, 值域在 (aj,ai) 之间还没被填的个数)

ci=j<i[aj=0], di=(ai1)[aj<aiaj0]

fi=1+max(fj+min(cicj, didj))

min 拆成两种不同的偏序关系,分治进行转移。时间复杂度 O(nlog2n)

submission

P4093 [HEOI2016/TJOI2016] 序列

bi 表示 i 这个位置的历史最大值,ci 表示历史最小值。

存在显然的转移:

fi=1+maxj<iajcibjaifj

转移需要满足三维偏序,考虑分治。

solve(l, mid) 解决左区间;左区间更新右区间;solve(mid + 1, r) 右区间内部更新。

这样在左区间更新右区间时,左边的DP值已经是最终的了。

时间复杂度 O(nlog2n)submission

P7170 [COCI2020-2021#3] Sateliti

设计一种二维哈希:hi,j=piqjsi,j, Hi,j=ai,bjhi,j

这样可以 O(1) 获取某个子矩阵的哈希值(二维前缀和)。

枚举最终方案的左上角,二分比对两种方案最长公共行数,再二分出最长公共列的位置。

把原矩阵复制成四份能够少判很多情况,时间复杂度 O(nmlognm)

submission

P7172 [COCI2020-2021#3] Specijacija

把原树划分为若干长链,两点在长链上上下移动不会改变他们的lca。

给每个长链选出代表点,所有叶子节点以及 ai 构成一颗点数为 2n+1 的新树。

主席树自下而上维护每个点对应长链上的代表点,每到一层相当于合并两条链(删一个代表点,改一个代表点)。

注意询问是祖先后代关系的情况,时间复杂度 O(nlogn)

submission

1023模拟赛T1

gym105173I

题意:长度为 n 的序列,1aik。如果 [i,i+k1]k 阶排列,则这个区间所有位置都是好的。

求所有位置都是好的的序列数量,n105,k103

实际上是用若干个排列去覆盖整个序列。

fi 表示前缀 i 中最后一个完整排列以 i 结尾的方案数。

枚举上一个完整排列的结尾:

fi=j=1kfij×gj

gj 是在 1k 的排列后面接上 j 个数,满足 [j+1,j+k] 是排列,1l<j, [l+1,l+k] 不是排列的方案数。

总方案为 j!,现在减掉不合法的,枚举第一个不合法的位置 l

gj=j!l=1j1gl×(jl)!

时间复杂度 O(nk)submission

gym105173L

题意:求操作序列个数,使得 () 能变为合法括号序列 A,每次可以:

  1. 在序列最右边添加一对括号,即 SS()
  2. 选取合法区间 [l,r],使 S[l,r](S[l,r])

(......) 能被加入当且仅当其范围内所有 () 已被加入。

换句话说,他能加入当且仅当 k 已被加入,其中 k 为范围内最后一个 () 的标号。

这能够推出,第 i() 能被加入当且仅当 i1 已被加入。

() 数量为 m,不妨先排出操作序列 1,2,,m

从后往前考虑(这保证了 ki 是单调不升的)每个 (.......) ,在 ki 后面选一个位置插入,系数容易计算。

时间复杂度 O(n)submission

gym105173G

题意:(l,r,p,q) 表示只保留 i 满足 lirai=pai=q,求剩余位置的逆序对数。

数据范围:1n,m105, 1ain

P10091 [ROIR 2022 Day 2] 分数排序

单组询问显然可以二分,a,b 都提前排序后存在一定单调性,能做到 O(n) check。

时间复杂度 O((n+q)logn),需要考虑精度问题。

submission

P10092 [ROIR 2022 Day 2] 网络系统升级计划

fu,i 表示以 u 为根的子树中,与儿子相连的边选了 i 条,能选的最大边数,同时记录边权和 gu,i

根据选不选 (u,v,w) 有两种转移:fu,ifu,i1+fv,i+w, fu,ifu,i+fv,i

fv,k 只能第二种转移到 fu,时间复杂度 O(nk)

注意到对 u 而言 fv 只有 i=ki<k 两种,因此空间可以做到线性。

submission

P10093 [ROIR 2022 Day 2] 礼物

题意:删除 [l,r] 中的前 k 大值,最大化剩余元素和,1n2×105,0kmin(100,n)

相同值的元素之间存在不确定性,规定先删大再删小,值相等的先删下标大的。

枚举 i,设辅助数组 {b},其中 bj=[i,j 在同一区间时 j 比 i 先删除]bi=1

i 被第 k 个删除当且仅当 [l,r] 恰好包含 k1

只关心 [l,r] 最左最右 1 的位置 [l,r],这样合法区间数减少到 O(k)

prei,nxti 表示 i 前/后第一个 1 的位置,答案即:

(prel,l) 的最大后缀和+(j=lrbj×aj)+(r,nxtr) 的最大前缀和

中间移项容易在枚举 [l,r]O(1) 维护。

查询某一区间的最大前缀/后缀和可以 ST 表做到 O(nlogn) 预处理 O(1) 询问。

从大到小在值域上扫描,链表维护每个 1 的前驱后继,时间复杂度 O(nlogn+nk)

submission

P10087 [ROIR 2022 Day 1] 跳跃机器人

fi 表示从 i 出发的答案。

不难得到,f1=max(d1,d21,d32,)

考虑 fi 需要满足的必要条件:

  • fidi
  • fi+1fi+1

两个条件同时成立就是充分的,即 fi=max(di,fi+11)

这样就在 O(n) 时间内递推出所有 f

submission

P11088 [ROI 2021 Day 1] 穿孔卡片

从上往下放置每个卡片。

卡片可以放置当且仅当其未被挡住且不为空的位置与答案串相同。

把当前卡片的矛盾位置(没被挡住且与答案不同)视为其度数。

能被加入当且仅当其度数为 0,写一个拓扑排序状物即可。

subsmission

P10089 [ROIR 2022 Day 1] 回文数组

哈希的结果是可加的,设正串的哈希值为 h,反串为 h

那么两部分合法当且仅当 ha+hb=ha+hb,移项即 haha=hbhb

当长度确定时不同的 hh 只有 O(n) 个,把他丢进桶里 check 即可。

如果奇偶性确定,答案是可二分的,时间复杂度 O(nlogn),需要双哈希。

submission

CF568E(加强)

题意:给出一个不完整排列 {a}ai=0 表示不确定。补全剩余位置并最大化 LIS。

钦定某些原先位置保留在 LIS 当中,形如 {ap1,ap2,,apk}

现在要在 pipi+1 当中为 0 的位置插入一些 x,必须满足 api<x<api+1

对于每个 ix 的值域互不相交,可以对此进行 DP。

fi 表示保留 ai 且以 i 结尾的 LIS 长度,从某个 j<iaj<ai 转移:

fi1+fj+min((j,i) 当中 0 的个数, 值域在 (aj,ai) 之间还没被填的个数)

ci=j<i[aj=0], di=(ai1)[aj<aiaj0]

fi=1+max(fj+min(cicj, didj))

min 拆成两种不同的偏序关系,分治进行转移。时间复杂度 O(nlog2n)

submission

P4093 [HEOI2016/TJOI2016] 序列

bi 表示 i 这个位置的历史最大值,ci 表示历史最小值。

存在显然的转移:

fi=1+maxj<iajcibjaifj

转移需要满足三维偏序,考虑分治。

solve(l, mid) 解决左区间;左区间更新右区间;solve(mid + 1, r) 右区间内部更新。

这样在左区间更新右区间时,左边的DP值已经是最终的了。

时间复杂度 O(nlog2n)submission

P7170 [COCI2020-2021#3] Sateliti

设计一种二维哈希:hi,j=piqjsi,j, Hi,j=ai,bjhi,j

这样可以 O(1) 获取某个子矩阵的哈希值(二维前缀和)。

枚举最终方案的左上角,二分比对两种方案最长公共行数,再二分出最长公共列的位置。

把原矩阵复制成四份能够少判很多情况,时间复杂度 O(nmlognm)

submission

P7172 [COCI2020-2021#3] Specijacija

把原树划分为若干长链,两点在长链上上下移动不会改变他们的lca。

给每个长链选出代表点,所有叶子节点以及 ai 构成一颗点数为 2n+1 的新树。

主席树自下而上维护每个点对应长链上的代表点,每到一层相当于合并两条链(删一个代表点,改一个代表点)。

注意询问是祖先后代关系的情况,时间复杂度 O(nlogn)

submission

P9768 [ROIR 2021 Day 2] A+B

给每一列赋予两种属性:

  1. 会不会往下一位进位:ai=[xi+yi10]
  2. 需不需要上一位进位:bi=[xi+yi+1zi(mod10)]

发现 ai 的表述还不是很完备,修改为 ai=[xi+yi+bi10]

所有列转化为 00,01,10,11 的形式。

我们发现一旦一个数的第二位为 1,其右边与之相邻的必然满足第一位为 1

同理如果一个数的第一位为 1,其左边与之相邻的必然满足第二位为 1

最后的答案一定形如 00 01 1111 10 00,即:

  1. 0110 数量相等,且两两配对。
  2. 11 只能加在一对 0110 中间。
  3. 00 只能加在开头,结尾,或一对 1001 当中。

到此步为止,已经容易计数不考虑前导零的方案数了。

考虑容斥,钦定开头是 0001,满足 x=0y=0z=0,剩下的部分也容易计数。

submission

gym101754a

给三种字符分别随机一个 2×2 的矩阵 A,B,C,并求出他们的逆。

一个串合法当且仅当:给 a 轮流赋权值 A,A1,同理 b,c,整个序列的乘积是单位矩阵。

这是因为每次必然是相邻相同的字符相消,替换为矩阵后可以用结合律得到 I

交换 l,r 处的两个不同字符,假设为 a,b

  • 替换 l,r
  • [l+1,r1] 的所有 A 改为 A1A1 改为 A
  • [l+1,r1] 的所有 B 改为 B1B1 改为 B

枚举哪两种字符参与交换(实际枚举不交换的那个)。

预处理某些东西可以 O(1) 得到交换后序列的乘积,进一步可写成 f(l)×g(r) 的形式。

给矩阵做哈希,在 map 中查找 f(l)=g(r)1 的个数。

submission

P11092 [ROI 2021 Day 2] 莫斯科数字

fi,j 表示考虑了后缀 i,后缀最大值是 j 的答案,复杂度 ||2n

submission

P9863 [POI2021~2022R2] arm

进行如下转换:构造长度为 k 的数组满足 pi>n,最小化 ka+b(k+pi)

(一次 1 操作,pi12 操作使权值翻 pi 倍)。

pi 确定时,想要最大化 pi,一定存在最优解满足 pkp11(默认排好序)。

pi=1 是无用的,也就是说 klog2n

枚举 k,不妨先让 p1=pk,再在满足条件的同时尽可能多的使 pi 减一。

submission

P8315 [COCI2021-2022#4] Šarenlist

n60,m15,考虑容斥。

钦定一条链颜色相同,相当于把某个边集合并为连通块,方案数就是 k连通块个数

submission

P8314 [COCI2021-2022#4] Parkovi

二分答案,考虑这么一个贪心:选的点深度越浅越好。

hu 表示 u 子树内未被覆盖的点与 u 的最大距离,hu=maxvson(u)(hv+w)

这样不是很完备,因为可能 v1 中选中的点能覆盖 v2 的点。

fu 表示 u 子树内被选中的点与 u 的最小距离,fu=minvson(u)fv+w

如果 hv+w+fumid,那么他已经被覆盖,没必要贡献给 hu

特别的,如果 fu>mid,则 u 本身不被覆盖,应初始化 hu=0,否则为

u 与其父亲直接边权为 X,如果 hu+X>lim,必须选 u,否则还能选更浅的点。

submission

P9691 [GDCPC2023] Base Station Construction

以区间为切入点不好做(如今年T2的贪心),考虑在数轴上做这个问题。

fi 表示考虑了 [1,i],并且钦定选 i 的答案。

fi 能从某个 fj 转移过来当且仅当不存在 j<lr<i,容易单调队列优化。

submission

P2567 [SCOI2010] 幸运数字

943 个幸运数不是其他幸运数的倍数。

所有组合中,不超过 1010 的只有 10264 个,大力搜索即可。

submission

**P4381 [IOI2008] Island **

给出图是一张基环树森林,求所有基环树的直径(最长简单路径)和。

分两类:不经过环,树DP;经过环,求出环上每棵树的最大深度,单调队列优化枚举。

代码写了一坨。submission

P7205 [COCI2019-2020#3] Drvca

以下默认整个数组有序。

a1,a2,a3 必有其二同属一个集合,不妨钦定 a1,a2A

贪心的将能选的数都加入 A,剩下的划分给 B

如果 B 不满足条件,考虑从 A 中反悔。

因为我们已经钦定了 A 的公差,反悔的部分只能是 A 的后缀。

从后往前枚举,同时 map 维护 B 每项的差值及个数,复杂度 nlogn

submission

P7981 [JRKSJ R3] system

题意:给定一个序列,每次同时使 aiaai,求 k 次后的序列。

第一步:ai1aai

第二步:ai2aai11=aaai1=aaaai,以此类推。

iai 连边,k 轮后 aik 对应哪个数,相当于 i 向父亲跳了 2k 步。

原图是一个内向基环树森林。

对于每个点而言,如果 2k 小于其深度,直接跳他的 2k 级祖先。

否则跳入环中,对环长取余。

submission

AT_dp_y Grid 2

c(i,j) 表示从关键点 i 不考虑其他限制走到 j 的方案数。

将关键点排序(x 为第一关键字,y 为第二关键字)。

f(i) 表示从起点 0 走到关键点 i,且中间不经过其他关键点的方案数。

f(i)=c(0,i)+j=1i1f(j)×c(j,i),这样就容斥掉了所有非法情况。

submission

P11238 「KTSC 2024 R1」铁路 2

以下默认树的边权为正。

  • 距离 u 最远的点一定是某条直径的一个端点。
  • 所有直径重合于一点,或一条路径,路径外的分支长度相等。

具体证明 @dbxxx:Link

设到 u 的最大距离为 du,对于任意一条直径 (s,t),总有 du=max(dist(s,u),dist(t,u))

通过上述两点是容易说明的。

u,v 所能产生贡献的上界是 min(du,dv),而这是能到达的。

du 降序排序,答案为 i=0n1i×di

submission

P11240 「KTSC 2024 R2」回文判定

对于每个 i[1,n2),调用 count_pair(0,i,n1i)

记返回值为 x

  • x=0,一定不是回文。
  • x=1,合法当且仅当 si=sn1i,仍需判断,将 in1i 加入集合 A
  • x=3s0=si=sni1,将 i 加入集合 B

调用 find_character(0,A),如果存在某个 s0=si,一定非法。

现在已经检验了所有 i[1,n2), si=sn1i,只剩下 s0sn1 的判断。

如果 B 不为空,iB,已经满足 s0=si,只需调用 count_pair(0,n1,i) 检验是否为 3

否则设 iA,如果 count_pair(i,n1i,n1)=3,非法。

否则检验 count_pair(i,0,n1) 是否为 1,此时询问次数上界恰好达到题目限制。

submission

「KTSC 2024 R2」岛屿

随便取一个三角形,内部加一个点并构造生成树。

不断往上加三角形,加的两条边染不同色即可,是一个拓扑排序状物。

原三角形每个顶点都同时属于两棵生成树。

新加入的点分别与两颗生成树相连,维持了这一性质,且无环连通。

submission

P1117 [NOI2016] 优秀的拆分

ai 表示以 i 结尾的 AA 串个数,bi 表示以 i 开头的 AA 串个数,则答案为 ai×bi+1

枚举 A 的长度 L,每 L 放置一个关键点:L,2L,3L

一个合法的 AA 串必然横跨相邻的两个关键点。

考虑关键点 pipi+1,设 A=lcs(prepi,prepi+1), B=lcp(sufpi,sufpi+1)

记横跨 pi,pi+1 且长度为 2LAA 为关键串,pi,L 不同关键串不同。

如果 A+BL,不存在关键串。

否则 A+B>L,记 li=piA+1,ri=pi+B1,同理定义 li+1,ri+1

考虑一个关键串的左右端点 l,r,其中 piL<lpi, rl+1=2L

由于 sli1sli+11,一定有 lli,同理 rri+1

不难得到 l[pimin(A,L)+1,min(pi,ri+12L+1)] 就是全部的关键串集合,差分维护 a,b 数组。

submission

P2150 [NOI2015] 寿司晚宴

暴力状压每个数的质因子,做 01 背包。

fi,s,t 表示考虑了前 i 个数,G 状态为 s,W 为 t 的方案数,st=

对于 n500,至多有一个大于 19 的质因子。

根据这个大因子进行分组,显然每组至多被一个人选,分组dp即可。

剩下 8 个小因子继续状压,时间复杂度 O(216n),枚举子集优化到 O(38n)

submission

P2178 [NOI2015] 品酒大会

建出后缀数组。

从大到小枚举 r=n10

加入所有 hi=r,相当于 saisai1 之间连边,边权为 r

一个连通块对应 h 数组上一段连续区间,连通块内任意两点 lcp 不小于 r

这恰好满足题目需求。

submission

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