Examples

2023-5-21 #55 渐行渐远迷路的我 看向了光年外璀璨星河

——清风疾行《幻想生物》

358 P5897 [IOI2013]wombats

线段树维护矩阵乘法,注意到有决策单调性,复杂度 O(nC2logn),但是空间过大,我们递归到一个较小的区间时暴力计算即可,若阈值为 k,空间会整体除 k

359 P8275 [USACO22OPEN] 262144 Revisited P

先考虑一个序列的问题:

答案显然不超过最大值 Xlogn,我们不妨先进行 <X 所有数的操作,进行完后能得到一个相邻两个至少一个 X 的序列(假设长为 l),答案即 X+logl

不会,有没有人来教育我一下!

咕咕咕。

360 P6277 [USACO20OPEN]Circus P

注意到一定能将状态变换为所有奶牛都在 1,2,,k,因此可以用一个 k 排列刻画状态,只需考虑这些排列之间的等价关系。

等价关系一定是每次换一对奶牛,而换奶牛不会受编号影响,我们只需求出位置的等价类,答案即 k!si!si 为第 i 个等价类大小)。

考虑如何判断两头奶牛 p,q 在同一等价类,我们提取出 pq 的一条路径,若路径上能空出一个分叉来等待,我们一定能交换这两头奶牛。

我们只需考虑中间全为二度点的链,注意到两端能交换等价于链长小于 nk,于是两个点能交换等价于中间不存在长度大于等于 nk 的全为二度点的链。

从大到小枚举 k,于是只需处理连通块的合并,我们动态地维护所有极长不合法链,对于每个 k 暴力枚举每个不合法链讨论其贡献即可,这里是均摊线性的。

复杂度 O(nlogn)

361 CF1832F Zombies

场上猜的是每次要么取 l 最小的一些,要么取 r 最大的一些,发现优化不了。

结论:所有门按照中点下标排序,选择同一个电网的一定是一段区间(证明可以考察函数图像)。

于是 wqs 二分,可能作为电网的区间只有 O(n) 个,每次 O(n2) dp 一下即可。

362 CF1808E3 Minibuses on Venus (hard version)

场上只会 E2,十分抽象,可能是嫌麻烦吧。

枚举 s,答案是所有存在一个 2vs(modk)v 的长为 n,和为 m(模 k)序列数量。

k 为奇数时,合法 v 恰好一个:

(i=1n1(ni)(1)i1kni1)+(1)n1[nvs(modk)]=(1ki=0n(ni)(1)ikni)+kn1(1)n1k+(1)n1[nv2v(modk)]=(k1)n+(1)n1k+kn1+(1)n1[nv2v(modk)]

v 求和:

=kn(k1)n(1)n1+(1)n1v[nv2v(modk)]=kn(k1)n+(1)n(1gcd(n2,k))

k 为偶数时,合法 v 有两个,差为 k2,类似地列出式子:

1i+jn(1)i+j1(ni,j,nij)knij1i+j=n(1)n1(ni)k+(1)n1(2i(ni)[nv2v(modk)]+2i(ni)[nv+k22v(modk)])=kn1(0cn(nc)2c(1)cknc12n(1)nk)+C=kn1(k2)n(2)nk+C

C 拿出来推一下:

(1)n1(2i(ni)[nv2v(modk)]+2i(ni)[nv+k22v(modk)])=(2)n1([nv2v(modk)]+[nv+k22v(modk)])

注意到两条只能成立一条,因此可以写成 [nv2v(modk2)]

求和有:

kn(k2)n+(2)n2+(2)n1v=0k21([nv2v(modk2)]])=kn(k2)n+(2)n2+(2)n1gcd(n2,k2)

复杂度 O(T+logn)

363 ARC160F Count Sorted Arrays

为啥都会????我觉得很难啊。

根据排序网络经典结论,只需对所有 01 序列分别考察排序后的结果。我们将排列双射成一个 01 序列组,每一项都是后一项的子集,其为 n 阶 hypercube 从 (0,0,,0)(1,1,,1) 的一条路径。

一个排列能被还原当且仅当其路径上所有 01 序列都能被还原,我们动态维护还不能被还原的 01 序列,每次加入操作时检查并更新答案。更新答案需要维护 hypercube 每个位置到 (0,0,,0)(1,1,,1) 的路径数量,容易在 O(n3n) 内计算。

364 loj#3607. 「PA 2021」Wystawa

这能做?????????????然而 hzr 的确是会做的,脚盆队长实力强劲,欢迎大家加入粉丝群 706094232。

做点讨论将题意转化为 aibia 中不超过 k 个数变为 b,具体地:

  • aibi 的数不少于 k,我们每次一定操作这种数,只需将其余 bi 赋值为 ai
  • 否则,我们一定把这些数操作完,然后 swap(a,b) 变为类似的问题。

二分答案,直接列出 dp,fi,j 表示前 i 个位置,j 次操作的答案,容易发现其有凸性,于是考虑 slope trick,将转移写出来:

fi,j=max(min(fi1,j+ai,fi1,j1+bi),0)=max(min(fi1,j,fi1,j1+biai)+ai,0)

每次转移完成后将 fmid 的 dp 值删掉并更新答案。

差分数组不降,其等价于差分数组插入 biai,整体平移容易维护,对 0 chkmax 只需 popback,使用 set 维护即可,复杂度 O(nlogn)

365 ARC159E Difference Sum Query

将问题结构建立出来,其事实上是在一个二叉搜索树上找一个点,每个结点恰好对应一个值。注意到答案就是虚树大小,我们类似线段树定位一下区间就能算出来了。

复杂度 O(Qlogn)

366 ARC138E Decreasing Subsequence

挺不错的题,zyf 之前搬到模拟赛过。

我们考察所有 ai 不为零的 iai1 构成的一张图,那么图由编号递减的链组成。

我们考察上升序列 i1,i2,,ik,注意到 ai1i1,于是有 aik1<aik11<<ai11<i1<i2<<ik,且序列对称部分有边,因此这些边一定分布在 k 条不同的链上。

于是就能做了,枚举链上左侧点数 A,右侧点数 B,分配方案数为第二类斯特林数,非这些链上的点任意分配成链方案数为贝尔数,答案即:

AB(n+1A+B){Ak}{Bk}Bn+1AB

卷积即可做到 O(nlogn),平方也可通过。

367 Yuhao Du Contest 11 M Minimum Element Problem

ZR 考过,补一下,还是挺有意思的。

类似 CF104008J Permutation Puzzle,注意到只需关心填数的上下界,内部的数一定能取到,差分后问题变为统计 depx,sizex 的分布(分别对应下界与上界)。

sizex 较简单,注意到在一颗二叉树上,插入一个排名固定的结点方案始终唯一,因此子树外的方案数始终为大小为 nsizex 的二叉树数量,而子树内部并不完全一致,因为左子树大小不能超过 X1,右子树大小不能超过 nX,因此要分别算出方案做卷积。

depx 的计算需要发现一个关键性质——X 左右侧的计数是独立的,我们只有对其子树大小的限制,求出两侧答案后卷积即可得到答案。以左侧为例,此时问题变为计数点数为 X1,根的连续右儿子数量为 k 的二叉树数量,这个东西叫卡特兰数的 k 次卷积,做法大概是:

使用兄弟儿子表示法与括号序刻画结构,再写出格路,注意我们只要求这个序列有 i 个连续括号作为结尾,使用折线法 O(1) 计算即可。

复杂度 O(nlogn)

posted @   xiaoziyao  阅读(168)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示