2024.4.23 近期练习
CF1924D
先考虑一个串的最长合法序列,维护一个栈,答案就是右括号加入时栈非空的次数。
我们看成从
要想只有
若
考虑像算卡特兰数,在折线与
终点变成了
这里的方案与满足前面条件的折线都构成双射关系。
CF1930F
若只有两个元素我们来考虑做法,设它们为
每位贪心,对于第
也就是
至于一个集合我们考虑枚举
若是
只需要计算
这个暴力更新,记忆化搜索,是只有
CF1943D1/2
考虑差分,然后选两个不相邻的数,前者
我们考虑用前面的正数匹配后面的负数,那么对于每个
若
设
Hard version 考虑容斥,设
设
若当前这位不钦定,那么
若钦定不合法,若是知道了
CF1909F1/2
如果我们把
那么我们对于
如果要填
所以我们发现差分出来每个位置的值
若是
考虑 Hard version。我们可以把这个问题放到棋盘上考虑,也就是在棋盘上放车。
我们把
相当于在边长
拆成一个大矩形,一个小矩形,方案数是
CF1913F
我们枚举回文中心,二分哈希,可以找到一个位置
但是我们如果把
假设回文中心为
最后计算答案枚举即可,注意字典序最小需要讨论。
CF1904F
考虑拓扑排序,对于每一条限制看成某个点大于/小于路径上的所有点。
那么有解就是没有环。连边的话考虑优化建图,考虑用倍增即可。
CF1935F
先考虑一个问做法。若
若
麻烦的是构造方案。钦定
假设我们处理点
对于
我们对于每个子树维护这个子树内可连接的
若满足条件那么就可以连上去。最后看是否联通,不连通就连
要使用可撤销并查集。
CF1917F
我们的想法是先构造出一条链为直径,然后把剩下的边全部挂在这条链最中心的点上。
我们发现若存在两条边加起来超过
我们假设直径的边的集合是
那么若
关键是,我们注意到,若是
变成了一个二维可行性背包,bitset 优化,
我们先把前
CF1942F
我们注意到每个
我们考虑扫描线,把操作全部离线,用数据结构维护每次修改的答案。
我们从前往后枚举
势能线段树,每个区间维护
此时可以把根号标记用加法标记表示了。复杂度证明未知。
所以我们采用分块的做法,如果一个够长的块,那么无论前面带入什么值,后面都会稀释成
我们分块,每次修改暴力修改一个块,求出
这个
最后暴力把所有块的答案算起来。当然,可以把所有块用线段树维护。
CF1948F
我们对于每个询问,也就是两部分,分别有
枚举差
范德蒙德恒等式:原式
因为
CF1967C
首先树状数组是一棵深度
然后我们顺势往上推,枚举子树的每个点。
若到子树的根距离为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】