Examples

2023-7-10 #65 我守着虚构的幻想 那些我珍视的模样

——不安琪《失败品》

448 QOJ6669 Mapa

这谁想得到啊??????????????????

插出一个模 1e9+7 下的多项式,保存系数。

449 CF1456E XOR-ranges

感觉挺难的。

类似 406 HDU6358 Innocence,我们将每一段拆成 log 个 trie 上的区间,每一个形如“固定前缀 S,长为 l 的后缀任选”,并将选择 [l,r] 内的数改为在这 log 段区间内选择一个。

假设已经完成选择,考虑如何计算答案。从低位到高位扫描序列,假设扫到了第 k 位。若存在第 k 位已经确定的数,在对应位置劈开序列,得到的两段仍是形态一致的子问题。否则所有数第 k 位任选,贡献即“目前区间两端第 k 位是否相同”(其等价于在笛卡尔树上贪心)。

若没有完成选择,我们沿用上面的结构。记 fk,i,j 表示考虑到第 k 位,目前区间是 [i,j] 的答案,转移即:

  • 枚举一个位置分段,选择其恰好固定到第 k 位的一段区间。
  • 断言所有数第 k 位都任选,递归到 k+1 的问题,并统计对应的贡献。

对于任意区间,其分解出的长为 k 前缀至多 4 种,于是复杂度 O(n3k),写成记忆化搜索形式比较方便。

450 P7722 [Ynoi2007] tmpq / CF1545F AquaMoon and Potatoes

感觉挺烂的。

首先把题意转换为 bi=aj=ck 的三元组数量。

根号分治,小的数每次修改后可以暴力 dp,而对前缀和的影响可以使用 O(1)O(n) 的分块统计。

对于每个大的数单独离线扫一遍序列,问题形如单点修改(总共只有 O(n) 次),维护前缀信息和,同样地使用 O(n)O(1) 分块维护即可。

不算难写,复杂度 O(nn)

451 牛客多校2021 Day3 D Count

枚举被 ban 掉的子集,枚举行列是否被 ban,枚举两条对角线是否被 ban 进行容斥,那么方案数就是剩余的点数选 m 减钦定掉的点数。

剩余的点数事实上可以表示成没有被 ban 的行数量乘列数量减去一个 O(n) 的值(修正对角线的贡献),于是我们 dp 行列是否被 ban 做一个背包状物即可,注意 dp 顺序应该是每次剥掉正方形的最外层一圈。

复杂度 O(2kn4)

452 牛客多校2021 Day3 G Yu Ling(Ling YueZheng) and Colorful Tree

纯 shaber 题。

注意到可以使用 bitset,只需维护一个点的祖先集合,权值 某值的结点集合,以及某个数的倍数集合。

第一部分直接存空间不太行,树上撒 O(w) 个点树分块,暴力跳散块改 bitset 空间就是线性了。

第二部分由于有权值相同的情况,不能直接分块,但维护一个分块的结构,根号重构就好了,调一调块长空间也是线性的。

第三部分套路地根号分治一下,倍数数量多就单独给权值开一个 bitset,调调块长空间应该是 O(nd(n)) 的。

复杂度 O(nd(n)+n2w)

453 uoj#659. 【ULR #2】Picks loves segment tree IX / AGC061E Increment or XOR

咕咕咕。

454 ARC119F AtCoder Express 3

不知道怎么到银牌的。

从前往后 dp,一个朴素的方法是直接记录最后一个数的类型,以及最后一个 A/B 到源点的最短路,这样是三次方的。

注意到若两维差距大于 2,我们一定不用关心较大的一维(转移一定不优),不妨直接令其对另一维 +2 chkmin。正确性很好说明,考察下一个这种类型字母即可。

复杂度 O(n2)

455 ARC126F Affine Sort

很不错的题目,感觉不止铜牌难度。

g(c) 为固定 ca,b 的对数,使用 O'Stolz 定理——

limkf(K)K3=limkg(K)K3(K1)3=13limkg(K)K2

我们将 aXi+bmodc 写成 aXic+bcmod1,当 ca,b 均可看作 [0,1] 内随机实数,于是问题转变为:

称实数对 (a,b) 是好的当且仅当 {aXi+b} 单增({x}x 的小数部分),求二维平面上所有好的实数对 (a,b) 构成的区域的面积。

先考虑如何判定一个 a 有解,即依次遍历 aXi 不会走完一个圆,可以写出,易知其充要性:

i=1n{(xi+1xi)a}=1

若一个 a 有解,其 b 的限制也很好刻画——我们只需将原点通过 b 平移到 [xna,x1a] 内。

现在考虑如何找到对应的 a,注意到 {ax} 这个函数关于 a 是不超过 O(x) 段的分段一次函数,加起来也只会有 O(x) 段,而且由于 (xi+1xi)=0,每一段都是平的,这就很好处理了。

于是直接排序找到这样的段,对 b 积分即可,复杂度一个 log

456 U105261 子序列删除问题

关于 U105261 「子序列删除问题」的讨论

最小割模型是经典的,我们求出每个位置为结束/开头的 LIS 长度 f,g,将所有可能在 LIS 中的数取出来,按 fi 分层,相邻层之间可以转移的点连边,每个点内部拆点限流 1,最小割即为答案。

我们将每一层按照下标排序,容易发现每个点的后继一定是一段区间(下标限制一段后缀,值限制一段前缀),且一层内的点从前往后区间端点不增。

我们断言,每次贪心地选择一条字典序最小的增广路,且不使用反向边,这样增广出的最大流同样最优。可以通过说明最大流路径不交叉(否则可以调整)来完成证明。

可以暴力模拟这一策略,每次遍历完一个点可以将其删去,因为若成功增广,其内部流量已经流满,否则这个点也无用,于是只需使用并查集找到区间内第一个未删去的点。

最小割的构造考虑一经典方法——从源点开始 dfs。不难发现上述的算法只会增广 O(n) 条边,我们将这些增广产生的反向边与原图的边放在一起做 dfs 即可,复杂度 O(nlogn)

457 AGC056D Subset Sum Game

为啥 hzr 觉得简单啊。

不妨考虑 n 为奇数的情况,我们枚举 alice 选择的哪一个数并将其删去,一个策略是对剩余的数匹配,bob 取一个数后 alice 立即取其匹配。显然按照值排序相邻匹配最优,此时只需判断是否有奇数位置和加 ai 与偶数位置和加 ai[L,R] 内。不难证明其同时为下界,上界,于是可以做到 O(n)

n 为偶数的情况是类似的,alice 选择一个数将其忽略并构造一组剩余数的匹配,判定方法与上面相同。此时若 bob 取匹配内的数可以递归到更小的子问题,若 bob 选了空出来的数,alice 可以随便选一个数,剩下的问题仍在我们的考虑之中,直接模拟可以做到平方。

更具体地,我们可以计算出空出来哪个数最优——我们将 ai+aLR 插入剩余序列,排序后匹配上的数即为最优解,于是可以做到线性。

证明:懒得写了,挂个链接

458 AGC060D Same Descent Set

为啥 zyf 觉得难啊。

2n1 枚举 descent 集合 S,令 f(S) 为对应的排列数量,即对 f(S)2 求和。

使用经典的容斥方法,枚举一个子集 T 表示我们强制 ST 上升,T 集合内则任意,带 (1)|S||T| 的容斥系数——

S(TS(1)|S||T|f(T))2

转而枚举 T1,T2,那么合法的 S 数量为 2n1|T1T2|,并集不好刻画,不妨写出 2n1|T1||T2|+|T1T2|,枚举其交 P,写出容斥系数时你会发现系数为 1,因为这就是 2|T1T2| 的组合意义,此时问题得到解决。

梳理一下流程:构造一段的 GF 12ex,使用 Sequence 构造得到拼接 TP 内的 descent 后一段的 GF,将系数平方后再使用 Sequence 构造拼接 P 内 descent 即可。

只需多项式求逆,复杂度 O(nlogn)

posted @   xiaoziyao  阅读(160)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-07-10 2022-7-10 #10 CF1644F & CF643F & CF1588F
点击右上角即可分享
微信分享提示