省选前想题记录
想题记录
wtcqwq
2.3~2.6
Todo List
除了省选计划题单、模拟赛补题和刷 AGC 以外。
- LGV 引理和线性代数;
- USACO Jan 的 G 和 P 组想一想学一学做一做。
随记
2.4。只有刺痛自己的时候才能认知自我啊...
2.4。好冷。机房里已经空无一人了。真希望确实是 “高处不胜寒” 啊。
2.5。hey bro。u can do this
。感觉到了暖流一般。
P5303
info
紫。完全自己想的。
tag:math,dp
思考路径
一个显然的容斥是,两块小砖不能连在一起的约束不方便 dp 和数学,我们可以将这部分贡献容斥掉。
现在问题变成了
前面这个问题可以 dp 了。
- 如果
- 可以直接放一块竖大砖,
不变, 变大 ; - 可以放一块小砖,
变大 , 不变; - 可以直接放两块竖着的大砖,
不变, 变大 ; - 可以直接放一块竖着的大砖和两块小砖,
不变, 增大 , 变大 ;
- 可以直接放一块竖大砖,
- 如果
- 可以放一块横大砖,
不变, 变大 ; - 可以放一块小砖,
变大 , 置为 , 变大 。
- 可以放一块横大砖,
直接转移即可吧。
这样写太麻烦了。
考虑两个零碎的块之间
前面后面的,都是 fib。
式子等价于
设
又,
Proof:
。
。 所以
。 也就是
。
。
所以,原始转化为
也就是
后面那一坨再用求和公式,
现在设
可以推一手发现,
直接矩阵快速幂即可。
代码
总结
- 硬去 dp 是毫无价值的,这对正解启发有限。
- 意识到两个小砖的特殊性,考虑钦定这两个砖的位置。
- 斐波那契数列的性质、快速求解方法和
砖块的价值。
P8321
info
紫。第一步就卡了。
tag:dp
思考路径
25 分部分分是好拿的。暴力略。
特殊性质:如果
满分就不会了。
题解
我们需要把问题抽离出排列来看。考虑将
问题转化成,一个匹配
接下来考虑怎么刻画
我们直接把
考虑当前的这一位,我们有两种选择:
-
将它进行匹配:
有
个可供匹配的(其中 是异色的个数)。前面的总代价是
。所以
。 -
不将它进行匹配:
代价就是
。
转移式就有了。计算
代码
现在是 14:02,我认为我可以在 15min 里写完。
现在是 14:09,我过了。submission。
总结
- 排列问题可以转化成匹配问题。下标和值是常见的二元组,可以转化成匹配或者平面直角坐标系下的一个点。
- 匹配问题可以染色后合并在一起。
的典型转化包括排序后按扫描线的先后处理或者 容斥。
P5239
info
绿。
tag:数学
思考路径
没懂这个题有啥价值。直接做即可。
时间复杂度
代码
现在是 14:14,我觉得我可以在 10min 里写完。
现在是 14:19,我过了。submission。
总结
这是组合数和组合数二位前缀和的板子。
c[0][0]=1;
for(ll i=1;i<=1000;i++){
c[i][0]=1;
for(ll j=1;j<=1000;j++){
if(i>=j) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+c[i][j];
dp[i][j]%=mod; (dp[i][j]+=mod)%=mod;
}
}
P8576
info
紫。
tag:分块,数学,数据结构
思考路径
发现这个很恶俗的式子一定不是硬做,我们来化简一手。
原式是
写成阶乘相除的形式:
发现
则原式变成了
发现分母中的
最后剩下的只有
上面是区间和,下面是区间积。
考虑第一个修改操作怎么做。可以分块。
每一块里维护值出现了几次,以及某个值现在实际代表什么(可以维护
不知道 511MB 的价值是什么。
代码
现在是 14:48,我认为我可以在 40min 里写完。
现在是 15:53,我要调不动了。
现在是 16:02,我过了。submission
总结
- 恶臭式子需要推一步,转化成简单的区间加区间阶乘积的问题。
- 分块书写的时候,不妨使用 remake 重构,来代替恶臭的散块处理过程。
P3773
info
紫。
tag:数学、Lucas定理、枚举子集、dp
思考路径
考虑
等价于
考虑
的充要条件。带入 Lucas 定理发现:
发现这本质上是一个二进制拆开的过程,且要求每一个
此时,只能是
所以
综上
枚举子集直接做 dp 即可。时间复杂度
代码
现在是 16:26,我认为我可以在 10min 里写完。
现在是 16:34,我写完了。submission。
CF1002D
info
蓝。
tag:最短路
思考路径
考虑只要两个棋子在某一个一样的点上,这个点的相邻点两个图存在交集,只要走过去走回来,这样循环往复,则代价永远是
我们要考虑怎么让两个棋子在一个一样的点上。将
则边就是
然后只要一个点,满足这个点在两个图上的邻域有交集,设定为好点。
答案就是
dijkstra 堆优化求即可。考虑新图上点是
代码
我认为 20min。现在是 16:57
现在是 17:16。submission。
2.4 模拟赛 A
info
紫。
tag:dp、人类智慧
下文约定
思考路径
一开始猜测,每次回来的肯定是在对岸的最小的。这个应该是对的。
但是这对解决问题没有价值。
然后我猜测,在对岸的一定构成一个区间。这玩意非常好 hack。
发现样例就不满足条件:
4
1 2 5 10
可能分裂成头尾两个区间。
然后继续猜测,将
然后我就敲出了把
然后这个东西也假了。因为复制一边的话,假设第一个状态
把这个东西拆开的话,又变成不是一个区间了。
来自 klc 的 hack 是
13 4
1 1 1 1 1 10 10 10 10 10 10 10 10
然后我就不会做了。
btw. 发现
可以得 20 分。这就是今早的全部了。
我认为我可以在 5min 左右写完,差不多也就是 5min。
if(c==2){
ll ans=0;
while(n>3){
ans+=min(t[1]*2+t[n]+t[n-1],t[1]+t[2]*2+t[n]);
n-=2;
}
if(n==2) ans+=t[2];
if(n==3) ans+=t[1]+t[2]+t[3];
printf("%lld",ans);
return 0;
}
题解
考虑我们关心的只有,每次送过去的人次里,有几个呆在那里不动了(记为
这样的东西构成
考虑这样的话我们需要送
可以理解为
设定一个二元组的权值是
假设放了一个权值为
发现这样的费用就是
对着这个式子 dp 即可。
还有一种可能是,选了小于
这个东西我们单独处理
然后
注意到
所以出题人不给暴力/状压的部分分是什么素质。
代码
现在是 14:32,我认为我可以在 25min 写完。
现在是 14:43,我过了。submission。
总结
-
题目不好做的时候,考虑能不能用二元组/二元组集合来表示。并且给这样的意象加上代价。这会极大方便我们 dp。
-
考虑到这种题目时,多手玩几组数据,争取可以用少量的几种操作来描述一个最优化问题。
P8594
info
紫。
tag:dp、矩阵快速幂(only bf)、组合数
思考路径
有一个显然的
然后发现这个东西很不优。因为每一列一共就那么几种情况:
-
要么竖着填了一个。
-
横着放的话,
两行其实是独立的,每一行可以考虑:前一个缝隙是断开的还是没有断开。
显然如果前一列是竖着填的话,就只能是断开的了。其它的可以直接做。
这样的话就可以获得 50 分。我认为我可以在 10min 左右写完。
现在是 15:15,我拿到了 50 分。submission。
然后接下来的
题解
发现竖着的
然后我们现在来考虑下
这个时候上下两行就独立了。我们假设第一行花了
个板子。那么第二行就花了 个板子。 这个时候我们发现,上下就都变成了隔板法了。
也就是
根据范德蒙德卷积:
上面那个式子等价于
然后考虑如果我们放了
然后考虑这就转化成了前面的问题的子问题,假设存在若干个
这个东西组合意义可以表示为从
也就是
考虑到
时间复杂度
现在是 15:29,我认为我 20min 写的完。
现在是 15:52,我过了。submission。
总结
- 开
数组的时候要当心,爆了一次内存。不能全局开 long long - 如果题目不会,不妨先把不容易处理的部分删掉。本题中竖着的类似分隔符的小方块非常碍事。删掉以后答案可以轻巧地用组合数表达出来。
- 如果上下指标求和有价值的话,考虑范德蒙德卷积。
- 组合题要考虑一些复杂式子的组合意义,毕竟组合公式纷繁复杂且未必看得出来,而组合公式都可以用组合意义解释。
P8367
info
黑。
tag:动态规划、组合数、数学
思考路径
假设
考虑
所有可能的
设
枚举
显然,
可以前缀和优化,时间复杂度降到
现在是 16:21,我觉得我要花 20min。
现在是 16:38,我拿到了 40 分。submission。
题解
先考虑一对
期望具有线性性,可以直接加起来。
直接算的话,时间复杂度还是
然后我们推一波式子:
设
发现:
带入可得
也就是
发现就是
我们只要每次把
移动
移动
我们不妨考虑第
然后莫队一般地转移即可。因为
代码
现在是 16:57,我觉得我可以在 40min 内写出来。
现在是 17:01,我发现没我想的这么简单。细节好像爆多。
我写不动了。明天再说吧。
总结
我有很多想说的,但是这里写不下。
P4562
info
蓝。
tag:期望、数学、数论
思考路径
考虑有若干个会通风报信的点,且一定需要它们通风报信(因为它不是任何别人的倍数)。
称这样的点为关键点。假设这样的点有
则恰好在最后一个关键点之后的概率是
又,有
所以,最后一个关键点排名的期望就是:
乘上所有的
代码
现在是 17:24,我觉得我可以在 3min 以内写完代码。
现在是 17:27,我过了。submission。
总结
- 在一个排列里,有若干个关键点(关键点也是随机生成的),则指定一个点在关键点的分段中出现的概率均等。
- 用组合数不太好解释的,不妨考虑概率和期望。
P11676
info
紫。
tag:树、dfs 序、区间 dp
这有紫???
思考路径
先看 Subtask 1,在 Subtask 1 的条件下,所有边都不在,只能加边。
这是一个区间 dp,考虑如何合并。如果
那么只要
总结一下,
然后来看 Subtask 2,这个时候就要考虑删边了。
同样地,考虑如何合并
如果
所以设
则,
朴素地求
二位前缀和预处理一手,就是
代码
现在是 17:55,我觉得我可以在 10min 里写完。
现在是 18:01,我过了。submission。
总结
- 树上的 dfs 序问题未必指向树形 dp,可以理解为一个下标到另一个下标不可抗力的联通关系,然后用区间 dp 去做。
P6657
info
紫。lgv 引理的模板题。
tag:lgv 引理、组合数
题解
什么是 lgv 引理?
设矩阵则有
考虑这道题是一个网格图,考虑到
显然只能按序匹配,也就是
所以
将
代码
CF348D
info
紫。*2500
tag:lgv 引理
思考路径
考虑到两个人第一步和最后一步肯定不能是同一个点,要不然就有交了。
所以我们不妨拆成
要求路径不交,套路地套用 lgv 引理。
可能的
直接用 dp 推一遍这四个的答案即可。
代码
现在是 9:53,我觉得 20min。
现在是 10:16,submission。
总结
- 如果 lgv 引理的题目中,所有点的起点和终点都相同,但起点和终点不计入”重合“,可以把所有第一步和最后一步枚举出来考虑。
- 计算
方式多样,套路地考虑棋盘格上 dp。
P7736
info
紫。
tag:lgv 引理、dp
思考路径
”偶数个交点的路径比奇数个交点的路径多多少个“ 也就是 偶数个交点的路径 - 奇数个教练的路径。
发现这和 lgv 引理中
考虑怎么把 偶数、奇数 和 终点起点的对应关系的逆序对个数联系起来。
考虑
这个关系就是逆序对的个数的奇偶性。
Proof:
时一定会产生奇数个交点。 假设
走到 的路径是 , 走到 的路径则是 。 考虑如果
和 之间产生了一个交点,则:
- 如果
,则 ; - 如果
,则 。 显然
。 如果产生了偶数个交点,相邻的两次相交后,大小关系不变。显然
,矛盾。 所以一定是奇数个交点。
代码
现在是 10:38,我觉得我能在 20min 内写完。
现在是 10:44,submission。
总结
- 两条曲线的交点个数的奇偶性和曲线起点终点的大小关系是否相同有关:
- 如果曲线开头和结尾的大小关系相反,则有奇数次相交;
- 相同,则有偶数次相交。
- 在路径不交问题上,如果出现了【A】比【B】多,更应该警惕。这可能恰好对应了 lgv 引理的
。
ABC216H
info
黑。
tag:lgv 引理、容斥原理、状态压缩 dp。
思考路径
不难发现这个概率是假的,直接算方案数,然后除以
不难发现这个
几个和前面看到的 lgv 引理不太一样的点:
- 终点集合不确定
很小。
发现这道题仍然是网格图:如果我们知道了终点集合
所以我们可以从小到大钦定
一个自然的 dp 思路是
每一次扔一个新的
然后
逆序对个数应该就是
直接 dp 应该就行了吧。时间复杂度
题解
稍微借鉴了一手怎么初始化。
代码
现在是 10:59,我觉得我能在 20min 里写出来。
现在是 11:25,submission。
总结
- lgv 引理本身需要一个明确的起点集合和终点集合。但是其实对于终点集合,我们只关心它与那个起点相匹配,以及这样的匹配会造成多少个逆序对。
- 如果每一种方案,会造成的决策次数相等(即等概率),则这个概率或者期望就是假的,不妨直接求出方案数,然后统一乘上这个概率。
- 数据规模提示的状态压缩 dp 可以记录是否匹配。
P8863
info
紫。
tag:状态压缩 dp、dp
思考路径
Tc 1~3
Tc 4~5
Tc 6~8
直接暴力,或者直接把 vector 当作状态,然后记忆化搜索的状压 dp。
类似
Tc 9~11
显然
时间复杂度
Tc 12~14
发现
让一个人来找另外一个人。第一个找的人是
第二个则是
Tc 15~18
继续考虑怎么状压。
发现对着每个数来 dp 前途有限,考虑对着操作来状压。
发现操作次数固定:
状态数大概是
Tc 19~20
发现上面这个东西,其实你也不是很关心每一次操作分别是哪个。
记录成集合态,然后记出目前考虑到前
题解
Tc 21~25
发现
发现实际操作位置只有
代码
现在是 14:19,我认为 20min。
现在是 14:29,submission。
P2260
info
紫。
tag:推式子、整除分块
思考路径
把这个式子拆开,
发现可以容斥。先假设
根据
然后前面后面这两个都是一维整除分块。
来想一下
拆开来:
四项拆开来:
-
第一项的结果是
。 -
第二项的结果是
,这也是一个一维整除分块。 -
第三项和第二项同理。
-
第四项,也是一个一维整除分块,只要每一块要满足被
除以和被 除以都相等。考虑到两个的区间分别至多只有
个,又满足单调性,所以端点可以按序插入,最多也就是 个区间,不影响数量级。这时候求和要求的是
,可以采用平方和公式来算。
代码
现在是 16:07,我认为 30min。
算了。不写了。这东西纯粹精神污染。
CF1278F
info
紫。
是 2.6 模拟赛 C 的弱化版。
tag:推式子、数学、第二类斯特林数
题解
先把题目要求的式子写出来:
其中
下降幂
符号是:
。 一些典型性质:
利用第二类斯特林数将普通幂
我们把
交换一下求和顺序
Lemma 1:
Proof:
右式约分一下:
“分母是两个阶乘的积” 提示我们带入组合数的阶乘式:
也就是
原式等价于
发现
然后把
二项式定理
发现上式的第二个和式和这个同质
使用二项式定理,
发现后面就是
暴力实现即可,时间复杂度
如果你会卷,那可以做到
代码
先理解加强版怎么做。然后直接写加强版即可。
P6031
info
2.6 模拟赛 t3
题解
书接上题,现在得到的式子是:
但是留着第二类斯特林数,复杂度一定无法突破
第二类斯特林数的通项公式:
代入得,
交换求和顺序,
发现
用
把
发现现在
发现
我们尝试能不能递推
把相似的东西提出来:
Lemma:
Proof:
。 所以
代入进去就是:
用
用
把中括号拆开:
提取公因式:
杨辉三角递推式逆运用:
将这个式子的来源
整理一下:
组合式不易处理,转化成下降幂:
把
答案就是
预处理下降幂、阶乘、阶乘逆、普通幂即可。
时间复杂度
代码
想题记录(2)
前一篇卡的写起来很难受。
wtcqwq
2.7-
P1527
info
紫
tag:整体二分、二维树状数组
思考路径
看到
可以参考 P3834 的操作,只不过一维变成了二维。
我们重新梳理一下整体二分的操作:
-
执行整体二分函数:参数中有两个区间
和 。表示目前的问询列表里第
位的问询答案都 。 -
我们指定
。将
的操作部署。如果达到了
个(或其他的某种情况,关键词就是达成了条件),则将这个问询 放入问询集合 中。反之,则将这个问询
先减去 的贡献,然后放入问询集合 中。 -
将
的问询放到一起。然后分裂成两个区间,递归执行整体二分函数。此时调用的情况就是
Sol(Q1,l,mid)
和Sol(Q2,mid+1,r)
。其中
Q1
和Q2
表示放到一起后表示 和 的两个区间。
发现其他步骤在这里都是套路的,考虑怎么快速部署
加上整体二分的复杂度也就是
代码
总结
- 整体二分框架复习。
- 整体二分中涉及一步问询的重编号,即排序后的
数组需要反复调用。很多时候前面给定的 ,实际上我们到原数据应该用 。 - 二维树状数组的板子。
- cdq 分治和整体二分是同一种分治思想在不同维度发挥作用的体现
- 不要真的去二分值域,不然还得需要离散化,常数更大。把矩阵中的所有元素按照权值排序,二分在答案在排序之后的数组中的位置即可。(因为答案一定是矩阵中存在的值,所以在这些值里面二分就好了。)
P5787
info
蓝。
tag:线段树合并
思考路径
二分图的性质
是一个二分图当且仅当没有奇环。
Lemma 1:一个图
是一个二分图的充分必要条件是,图中不存在一个环 ,使得 。 充分性:对于任意一个二分图,由于每个部分内部都没有边,因此一个点从出去自己部分再回到自己部分都是经过两条边,充分性得证。
必要性:对于一个没有奇环的图,任意钦定一个点为黑色,然后与它相连的点为白色,与白色相连的点为黑色,将整个图染色,我们发现出现同色点之间存在一条边的条件就是存在奇环,所以必要性得证。
发现奇环性质可以用扩展域并查集维护。不可以路径压缩,所以下文的
不难发现,我们可以将
这样的话,任意一条
此时问题转化成了:
存在
条边,每条边在 现时存在,连接 和 。试判断每一时间刻是否存在 和 可达的情况。
考虑线段树分治,对时间轴建立线段树。发现
发现加边操作此时直接加上了时间刻的维度,不需要可以维护时间。同理地,在查询时,我们可以一次性维护一个区间。
如果把一个区间一直存在的边全都连上也没出现奇环的情况的话,我们就可以往下拆,拆成两个区间继续处理。发现者两个区间的处理都基于父节点已经处理过的扩展域并查集上。
发现一个区间做完以后,要在扩展域并查集上拆回来,这样的话才能回退到父节点。这个怎么解决呢?
在每一次连边的时候加入栈中。进入一个线段树节点前维护一个栈顶编号。回溯时,出栈至上文的栈顶编号,每一次把
扩展域并查集需要用随机权值或按秩合并维护,时间复杂度
线段树共有
代码
总结
- 线段树合并的框架。如果发现一条边/一个物件 etc. 只对一个时段
有作用的时候,不妨用线段树分治来做 - 需要回溯的时候,要严格地做到”谁污染谁治理“,不能大刀阔斧地
重置,要不然复杂度是假的。 - 异曲同工之妙的还有线段树建图。
- 一个图是二分图的充分必要条件是不存在奇环。
P4766
info
蓝。
tag:区间 dp、笛卡尔树
思考路径
发现我们可以把攻击的时刻作为下标,变成一道数组个数计数。
准确的来说,设
则题意转化成了:
对于每一个
设
发现将两个区间合并时,原来就在两个区间里的可以直接用
也就是枚举分界点
则不难发现
做完了。预处理
代码
预计 10min。现在是 14:49。
现在是 15:02,submission。
总结
- 发现一维 dp 不好做的时候不妨考虑区间 dp,进一步地如果涉及开始时间结束时间,二维 dp 不妨设定为
的才算,这样好处理。 - 笛卡尔树是一种思想,这道题本质上是在笛卡尔树上 dp。
CF1442D
info
紫。
tag:线段树分治、背包
思考路径
可爱题。
首先,不降这个条件启发我们考虑挖掘一些性质。
直觉上,如果我们一个数组开始选了,但是只选一半,一定是不优的。尝试来证明这个东西。
Lemma:如果开始选一个,在操作次数足够的情况下,优先选完。
如果我们在两个数组中第一个没选的数分别是
和 。 如果
,由 得 。那么我们选上 ,删去 ,一定更优秀。 不断这么替换,一定能将
和 其中某一个删空。
枚举最后一个因为操作数不足导致没选完的数组是哪个 以及 选到了什么位置。
剩下的数组,要选必须全部选完,要不就必须全部不选。所以可以整体成另外一个问题。
Transformed Problem. 背包容量是
,每一个物品的代价是 ,价值是 。不能选某个特定的物品 ,求不超过容量的最大价值,对所有不同的 和某个范围的 都要求出答案。
发现是线段树分治类似的典题。直接维护即可。
代码
现在是 15:59,期望 15min。
总结
- 线段树分治本身不是一种算法,而是一种思想。本题不涉及任何线段树的函数,但本质也是线段树分治。
- 证明用到了调整法,这种如果我可以干决策
,就一定可以干决策 ,可以干决策 ,最后发现原来还可以干决策 ,得证了。
CF1768E
info
Eason2009 讲课题。
蓝。*2300
tag:人类智慧、分类讨论、组合数
思考路径
发现连续做同一个操作毫无价值。所以一定是交替来做。
手玩发现任何一个序列至多经过 3 次操作都会有序。
Lemma:任意
的排列经过 次操作都会有序。 Proof:
发现操作
操作 操作 的情况是: 一次操作在变换的区间的前
个,一定积累了 个比它们大的。一次操作在变换的区间的后 个,一定积累了 个比它们小的。 显然这不重不漏。
三次操作后
各自积累了两次”是变换的区间“。对于 ,这是两次 “积累了 个比它们大的”,所以至少有 个比它们大。另外两个区域同理。 再,显然两次操作后,每
个之间一定变得有序。
然后我们分讨一下:
-
只有已经有序一种情况,且无贡献。
-
要么
恰好覆盖了 且恰好有序,要么 恰好覆盖了 且恰好有序。发现这样的个数是
。 -
包括了 或 包括了 。在
个位置里选 个,恰好是 。这
个数可以任意排列,也就是 。剩下的
个数可以任意排列,也就是 。所以两者各有
种情况,考虑是否存在交叉。显然存在。
枚举
区间内 的数有几个,然后可以组合数计算重复:所以
的总排列个数就是 -
是全集,也就是
。
发现答案是
也就是
把前面的代进来,直接算就行了。
代码
总结
- 本题中
是骗得,实际上只有 ,可以朴素地分类讨论。 细节很多,可以转化成 ,然后做容斥,这样就好做很多了。- 本题是典型的,先知道结果后知道约束,然后对着约束推式子即可。
ARC110D
info
蓝。1thenzoo9 讲课题。
跟 joeyj 一起想的。
tag:组合数、组合意义
思考路径
考虑组合数的意义,这个东西等价于:
有
枚举插进去几个:
这个东西发现就是:
直接
代码
现在是 16:52,五分钟。
现在是 16:58,submission。
总结
- 看起来很奇怪的,带有组合数的式子,不妨把里面的一些元素当作一个整体,能不能成为别样的组合意义。
虽然听起来简单,但是如果 大 小,这可能有用。
ARC106D
info
蓝。1thenzoo9 讲课题。
tag:组合数学
思考路径
推式子。
容斥:
发现剩下的都是好求的,考虑怎么算
可以二项式定理:
移动求和符号的顺序:
设
则答案为:
题目要求
代码
总结
-
二项式定理:
-
调换
符号的顺序,使得两个 之间的项只跟对应的 的内容有关系方便预处理。
ARC067E
info
紫。1thenzoo9 讲课题。没懂有什么可讲之处。至少我是能一眼
tag:dp
思考路径
发现
直接设
然后考虑
然后转移即可:
其中,
看起来是
代码
总结
- 调和级数分析复杂度,在对 值的出现次数 和 总和 做限制时很好用。
- 对 值的出现次数 做限制时,可以直接对出现次数做 dp。
- 跟 值得出现次数 有关系的题目,还经常是根号分治做。
CF1781F
info
紫。
tag:dp、组合数、括号匹配
思考路径
典型的括号序列的 trick 包括把括号序列转成
设
此时合法扩展序列的充分必要条件就是
本题中,加入一个 (
的同时一定加入一个 )
,亦即总和始终为
那这样的话,加入 ()
就相当于把原来的
加入 )(
就相当于把原来的
题解
设
加入 ()
的话,我们需要把 (
前、()
中和 )
后的东西拆开来考虑。
枚举前两段分别有多少个:
加入 )(
的话,其实是一样的,枚举前两段分别有多少个,只有
加起来即可。发现这样的话时间复杂度至少是
进一步发现
把只跟
发现后面这个和式含有很多个
也就是
是卷积的形式,可以预处理。
时间复杂度就降到
因为是算概率,所以最后要除以
代码
CF1572C
info
紫。*2700。
思考路径
设
发现如果一次也不省的话,答案就是
所以答案就是
怎么转移这个
看看能不能找到牛性质。如果有两个区间
直接区间 dp 就行了。转移枚举中间点直接做?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通