摘要: XXXII.[AGC005F] Many Easy Problems 直接计算恐怕不太容易,正难则反,考虑一个节点何时不被包含在一个连通块内。 显然,假如我们以当前节点为根,则当且仅当集合中所有节点同处在其某一个儿子的子树内,当前节点不在连通块内。 我们设 \(f(i,j)\) 表示节点 \(i\) 阅读全文
posted @ 2021-04-01 20:57 Troverld 阅读(55) 评论(0) 推荐(0)
摘要: XXXI.[CTS2019]珍珠 设$cnt_i$为$i$颜色的出现次数。 则由题意,应有$\sum\limits_^\left\lfloor\dfrac{2}\right\rfloor\geq m$ 下面开始颓式子: \(\begin{aligned}\sum\limits_{i=1}^{D}\l 阅读全文
posted @ 2021-04-01 20:56 Troverld 阅读(55) 评论(0) 推荐(0)
摘要: XXX.calc加强版 没错,这题还有个加强版,要从多项式角度考虑了。 首先,很容易就能想到,单个数$a$的生成函数即为$1+ax$,而我们要求的就是$\prod\limits_^(1+ix)$这个多项式的前$n$项的系数。 我们在之前XV.付公主的背包中也碰见过类似的形式。于是我们可以直接套上一个 阅读全文
posted @ 2021-04-01 20:54 Troverld 阅读(59) 评论(0) 推荐(0)
摘要: XXIX.[集训队互测2012] calc 考虑DP。 我们设$f(i,j)$表示所有有$i$个数,且每个数都处于$[1,j]$区间内的递增序列的值之和。则答案即为$f(n,m)\times n!$(因为题目中不限制只有递增序列) 我们考虑DP,则有 \(f(i,j)=f(i-1,j-1)\time 阅读全文
posted @ 2021-04-01 20:51 Troverld 阅读(76) 评论(0) 推荐(0)
摘要: XXVIII.[NOI2017]泳池 常系数齐次线性递推的应用。 我们首先将问题转换为(面积小于等于$K$的方案数)减去(面积小于等于$K-1$的方案数)。 然后考虑两个东西分别DP。我们设当前考虑的是面积小于等于$m$的情况。 我们设$f_{i,j}$表示考虑一段长为$i$的沙滩,其中前$j-1$ 阅读全文
posted @ 2021-04-01 20:50 Troverld 阅读(93) 评论(0) 推荐(0)
摘要: XXVII.【模板】常系数齐次线性递推 题意:已知$f_0,\dots,f_$,且对于$k\geq m$,有 \(f_k=\sum\limits_{i=1}^ma_if_{k-i}\) 其中$a_1,\dots,a_m$是给定的系数。 求$f_n$。 我们一个naive的思路就是矩阵快速幂。 考虑设 阅读全文
posted @ 2021-04-01 20:48 Troverld 阅读(93) 评论(0) 推荐(0)
摘要: XVI.WD与积木 本题有两种思路。 首先,两种思路共同的地方在于都将期望化成了$\dfrac{\text{所有方案一共的层数}}{\text{总共的方案数}}\(。我们设其为\)\dfrac$。 思路1:从DP开始 我们先考虑求出$g_n$。 我们有 \(g_n=\sum\limits_{i=1} 阅读全文
posted @ 2021-04-01 20:44 Troverld 阅读(102) 评论(0) 推荐(0)
摘要: XXV.玩游戏 我们考虑令$f(p)$表示游戏的“$p$次价值”的期望。 则按照期望定义,我们有 \(f(p)=\dfrac{\sum\limits_{i=0}^n\sum\limits_{j=0}^m(a_i+b_j)^p}{nm}\) 考虑二项式暴力展开,得到 \(f(p)=\dfrac{\su 阅读全文
posted @ 2021-04-01 20:41 Troverld 阅读(126) 评论(0) 推荐(0)
摘要: XXIV.CF960G Bandit Blues 我们注意到,$n$一定是前缀最大值中最靠右的一个以及后缀最大值中最靠左的一个。换句话说,我们在位置$n$可以将整个排列划成两半,前一半中恰有$a-1$个前缀最大值,而后一半中恰有$b-1$个后缀最大值。 显然两半的问题是相同的,因为后缀最大值在翻转序 阅读全文
posted @ 2021-04-01 20:39 Troverld 阅读(75) 评论(0) 推荐(0)
摘要: XVIII.CF848E Days of Floral Colours 大部分FFT题都是用来优化DP的…… 首先,我们看向环上的某个位置$i$(自动对$2n$取模): \(\dots,(i-2),(i-1),i,(i+1),(i+2),\dots\) 它有如下几种配对: \((i,i+n)\)。 阅读全文
posted @ 2021-04-01 20:36 Troverld 阅读(61) 评论(0) 推荐(0)
摘要: XVII.CF773F Test Data Generation 首先先把题意翻译成人话,就是满足两个条件: $n$为奇数。 $a_n$为$a$中含有最少$2$次幂的因子的数,且$a_n$中至少含有一个$2$。 第一个限制很好满足,但是第二个咋办呢? 我们再来翻译一下,就是将所有数同除以$2$的一个 阅读全文
posted @ 2021-04-01 20:33 Troverld 阅读(96) 评论(0) 推荐(0)
摘要: XVI.「SWTR-03」Counting Trees 说起来他们那场比赛还找我帮忙验了这题来着的,然后我$50%$暴力都不会 先说结论:任何度数之和等于$2m-2$的$m$个节点,都可以构成至少一颗树。该结论可以通过一个名叫prufer序列的神奇玩意证出。 于是我们现在就有这样的判别式: \(\s 阅读全文
posted @ 2021-04-01 20:29 Troverld 阅读(85) 评论(0) 推荐(0)
摘要: XV.付公主的背包 注意这份题解中$f_i$的意义是$f$的$i$次项系数,而$f_i(x)$的意义是第$i$个多项式! 对于每个商品,设它的体积为$v$,则我们可以设一个$f$,其中$f_i=[v|i]$。 则最终的答案,就是所有商品的$f$的卷积。 我们把$f$写成函数的形式,它就变成$f(x) 阅读全文
posted @ 2021-04-01 20:27 Troverld 阅读(65) 评论(0) 推荐(0)
摘要: XV.UVA12298 Super Poker II 我们设$f_{i,j}$表示遍历完前$i$种花色后,有多少种方案凑出和为$j$来。 再设$g_{i,j}$表示第$i$种花色是否存在点数为$j$的牌。 则有$f_{i,j}=\sum\limits_^jf_{i-1,k}\times g_{i,j 阅读全文
posted @ 2021-04-01 20:25 Troverld 阅读(40) 评论(0) 推荐(0)
摘要: XIV.CF553E Kyoya and Train 题解 阅读全文
posted @ 2021-04-01 20:23 Troverld 阅读(27) 评论(0) 推荐(0)
摘要: XIII.CF623E Transforming Sequence 这题仔细一想还挺简单的……但是我一直在想有标号的DP,但实际上只需要用无标号DP即可…… 首先,一眼可以看出当$n>k$时无解,可以直接特判掉。 则我们设$f[i][j]$表示当前填到第$i$个数,且前$i$个数$\operator 阅读全文
posted @ 2021-04-01 20:22 Troverld 阅读(41) 评论(0) 推荐(0)
摘要: XII.差分与前缀和 打 表 出 奇 迹 我们先考虑前缀和。 对于两个下标$i,j$,我们考虑$k$阶前缀和后,位置$j$会被加上多少个$a_i$。显然,加上$a_i$的数量,仅与$j-i$的值有关。 于是我们就打表辣 \(k\) \ \(j-i\) 0 1 2 3 4 1 1 1 1 1 1 2 阅读全文
posted @ 2021-04-01 20:19 Troverld 阅读(87) 评论(0) 推荐(0)
摘要: XI.CF438E The Child and Binary Tree 经 典 老 题 我们可以设一个$G$,其中$G_x=[\exists\ i\ \text\ c_i=x]$,即是否存在$x$这个值。 我们再设$F_x$表示权值为$x$的二叉树的方案数。很明显有$F_0=1$。 则我们枚举树根的 阅读全文
posted @ 2021-04-01 20:14 Troverld 阅读(62) 评论(0) 推荐(0)
摘要: XI.[集训队作业2013]城市规划 各类计数问题是多项式最常见的场景。 这里有一个套路,就是设$f(x)$为合法个数,$g(x)$为全部个数,然后往往$g$可以被$f$与$g$表示出来,且$g$本身有通项公式,然后就可以简单求解了。 例如这题。我们设$f(x)$为联通图个数,$g(x)$为全部无向 阅读全文
posted @ 2021-04-01 20:13 Troverld 阅读(48) 评论(0) 推荐(0)
摘要: X.拉格朗日插值2 从这题开始,拉格朗日插值就逐渐同多项式同流合污了。 我们列出式子: \(f(m+i)=\sum\limits_{j=0}^nf(j)\prod\limits_{k\neq j}\dfrac{m+i-k}{j-k}\) 借鉴前面的思想,我们将它转成了 \(f(m+i)=\sum\l 阅读全文
posted @ 2021-04-01 20:10 Troverld 阅读(101) 评论(0) 推荐(0)
摘要: IX.CF622F The Sum of the k-th Powers 看上去这题是上一题的弱化版,但其实不是——上题我们要筛出式子,但是这题我们要保证复杂度。 首先,我们打算选取$0\sim k+1$,共$k+2$个点进行插值。我们设$f_x=\sum\limits_x ik$。 则由拉格朗日插 阅读全文
posted @ 2021-04-01 20:05 Troverld 阅读(85) 评论(0) 推荐(0)
摘要: VIII.[TJOI2018]教科书般的亵渎 这题主要是介绍拉格朗日插值模板那题中,我们提到的“求出$f(x)$的多项式表达”的做法。 首先,这题显然如果我们令$f(x)=\sum\limits_i{m+1}$,且$a_{m+1}=n+1$的话,答案就是 \(\sum\limits_{i=1}^{m 阅读全文
posted @ 2021-04-01 20:03 Troverld 阅读(99) 评论(0) 推荐(0)
摘要: VII.【模板】拉格朗日插值 我们之前一直在研究多项式。但是多项式都是从哪来的呢? 所以拉格朗日插值就给了我们一种求多项式的方式。具体而言,运用拉格朗日插值,你可以根据$n+1$个点求出一个$n$次多项式来经过这所有点。 我们来看一下这具体是怎么实现的。 我们定义拉格朗日基本多项式为: \(\box 阅读全文
posted @ 2021-04-01 20:00 Troverld 阅读(257) 评论(0) 推荐(0)
摘要: namespace Poly{ const int N=1<<20; const int mod=998244353; const int G=3; int n,rev[N],f[N],g[N],all; int ksm(int x,int y){ int rt=1; for(;y;x=(1llxx 阅读全文
posted @ 2021-04-01 19:57 Troverld 阅读(42) 评论(0) 推荐(0)
摘要: VII.【模板】多项式除法 首先,为了方便,我们将$n$和$m$各自加一。 我们设$F^T$为$F$的翻转,更准确的定义为 \(F^T(x)=x^{n-1}F(\dfrac{1}{x})\) 现在我们考虑推式子。 由题意, \(F(x)=(GQ)(x)+R(x)\) 因为这个$x$是无实意的,故我们 阅读全文
posted @ 2021-04-01 19:54 Troverld 阅读(204) 评论(0) 推荐(0)
摘要: VII.【模板】多项式幂函数 (加强版) 可以看到这题与上题的唯一区别就是$a_0$的取值。 因为我们之前在$\ln$的时候,是要求$a_0=1$的;而这题不保证$a_0=1$,咋办呢? 我们考虑到当$a_0\neq0$时,我们有 \(a^k=(\dfrac{a}{a_0})^k\times(a_0 阅读全文
posted @ 2021-04-01 19:53 Troverld 阅读(196) 评论(0) 推荐(0)
摘要: VI.【模板】多项式快速幂 我们要求$g=f^k$ 两边求$\ln$得到 \(\ln g=k\ln f\) 然后再幂回去 \(g=e^{k\ln f}\) 于是一次$\ln$,一次$\exp$即可解决。 关于那个超大的$k$,在读入的时候直接$\bmod$上去即可。 时间复杂度$O(n\log n) 阅读全文
posted @ 2021-04-01 19:52 Troverld 阅读(104) 评论(0) 推荐(0)
摘要: VI.【模板】多项式开根(加强版) 这题和上题唯一的区别就是$a_0$的取值——本题$a_0$不一定为$1$。 咋办呢? 我们观察到里面有一句话: 保证$a_0$是$\bmod\ 998244353$下的二次剩余。 二次剩余?这是啥?能吃吗? 这时,你突然想起曾经看到过一道模板题: 【模板】二次剩余 阅读全文
posted @ 2021-04-01 19:50 Troverld 阅读(111) 评论(0) 推荐(0)
摘要: V.【模板】多项式开根 同之前无数题一样,我们设已知$b2\equiv A\pmod{xm}$,并且我们想求出一个$B$使得$B2\equiv A\pmod{x{2m}}$。 首先,显然有 \(B-b\equiv0\pmod{x^m}\) 老套路,平方一下,得到 \(B^2-2Bb+b^2\equi 阅读全文
posted @ 2021-04-01 19:45 Troverld 阅读(91) 评论(0) 推荐(0)
摘要: IV.【模板】多项式指数函数(多项式 exp) 本题有两种解法,一种比较好理解,一种比较通用(并且速度快)。 首先法一便是分治FFT解法。 我们有 \(B=e^A\) 于是两边求导,得到 \(B'=A'e^A\) 因为又有$B=e^A$,代入得 \(B'=A'B\) 我们再积分回去,得到 \(\in 阅读全文
posted @ 2021-04-01 19:42 Troverld 阅读(1053) 评论(0) 推荐(0)
摘要: III.【模板】多项式对数函数(多项式 ln) 这题大概不难吧( 我们已知$B\equiv\ln(A)$ 于是两边求导,就有$B'\equiv\ln'(A)$。 右边套个链式求导法则,就等于$\ln'(A)\equiv\dfrac{A'}$ 于是$B'\equiv\dfrac{A'}$ 然后两边不定 阅读全文
posted @ 2021-04-01 19:40 Troverld 阅读(303) 评论(0) 推荐(0)
摘要: II.【模板】多项式乘法逆 \(F\times G\equiv1(\operatorname{mod} x^n)\)?这是啥意思? 实际上,它的意思就是$F\times G$的$1\sim n$次幂的系数都为$0$,只有常数项为$1$,再往上的系数不管。 我们考虑递推求解。 设我们已经求出了使$F\ 阅读全文
posted @ 2021-04-01 19:38 Troverld 阅读(165) 评论(0) 推荐(0)
摘要: I.【模板】分治 FFT 作为多项式的第一题,这题还是挺好理解的。 首先,我们完全可以把$n$扩大到$2$的次幂,空余地方补上$0$,并且答案不变。 然后,对于递推式$f_i=\sum\limits_^f_g_j$,我们如果再令$g_0=0$的话,显然这个$j$的下界是可以改成$0$的——虽然这会使 阅读全文
posted @ 2021-04-01 19:36 Troverld 阅读(92) 评论(0) 推荐(0)
摘要: XVIII.[PA2017]Banany 心血来潮想开道动态点分治的题练手,然后被折磨了一下午…… 首先,套上点分树是没问题的。那么,怎样维护修改呢? 单点修改无论用什么结构维护都是非常easy的;但是边的修改就不太简单了,因为它涉及到不止一条路径。 我们设当前修改了边 \((x,y)\)。对于点分 阅读全文
posted @ 2021-04-01 19:34 Troverld 阅读(89) 评论(0) 推荐(0)
摘要: XVII.CF434E Furukawa Nagisa's Tree 我们观察所有合法对,发现其在枚举一个点、找到关于该点符合条件的另两点时,并不能唯一判定该三元环一定合法,因为另两点间的边不一定符合条件。但是,观察不合法的对,就会发现其中有且仅有两个点,其连接了一条好路径与一条坏路径(好路径即满足 阅读全文
posted @ 2021-04-01 13:15 Troverld 阅读(68) 评论(0) 推荐(0)
摘要: XVI.CF715C Digit Tree 好久没写淀粉质了,省选前就来一题练练手罢。 路径上的数就拆成两半分别取模,最后用一个 map 储存并合并即可。因为本题维护的信息(对数)具有可减性,因此可以采取求出整棵树的值后,减去每棵子树的值的做法。 本题的 unordered_map 被卡了,必须用 阅读全文
posted @ 2021-04-01 13:13 Troverld 阅读(71) 评论(0) 推荐(0)
摘要: XV.[Codeforces GYM 101002K] YATP (没有单独的页面,就放个到大页面的连接罢) 我们考虑先套一个点分治。点分治后,考虑计算所有LCA为根节点的对中,最优的那些对。 我们考虑就算某两个点它们位于同一棵子树内也不要紧——这里它的权值被表示成 \(dep_i+dep_j+a_ 阅读全文
posted @ 2021-04-01 13:11 Troverld 阅读(109) 评论(0) 推荐(0)
摘要: XIV.[URAL2085]Magic Programmer 如何处理路径上所有东西出现且只出现一次的限制呢?我们考虑哈希。只需要用一个哈希表处理所有出现过的东西,然后求另一半东西时,找出它的补集的哈希值在哈希表中查询,即可做到路径拼接。 代码: #include<bits/stdc++.h> us 阅读全文
posted @ 2021-04-01 13:09 Troverld 阅读(68) 评论(0) 推荐(0)
摘要: XIII.[USACO18JAN]Cow at Large P 这题我做的时候时限1s,然后卡不过去……之后不得不发帖请求把时限调大到题面中的4s 假设当前询问了点$rt$,那么我们把这棵树变成以$rt$为根,设$dep_i$为此刻$i$节点的深度。 我们再令$f_i$表示$i$节点距离最近的叶子的 阅读全文
posted @ 2021-04-01 13:06 Troverld 阅读(84) 评论(0) 推荐(0)
摘要: XII.小清新数据结构题 太 清 新 了 话说就我一个人看到这道题后兴冲冲的以为暴力LCT就能过然后发现LCT如果维护子树信息的话只有根节点处的信息是正确的吗(没错,就我一个) 闲话少说,正片开始。 法一:推一种式子,然后LCT/树剖维护 我们设$val_i$为$i$节点的值,然后$sum_i$为根 阅读全文
posted @ 2021-04-01 13:04 Troverld 阅读(87) 评论(0) 推荐(0)
摘要: XI.[USACO12NOV]Balanced Trees G 与上题类似,我们仍然需要分成$FR$路径和$TO$路径两部分考虑。默认将根归为$FR$路径中考虑。 首先是判断怎样搞才是合法的。关于这个,我们可以用一个pair<int,int>来记录全部匹配完后,剩余的)与(的数量,其中first表示 阅读全文
posted @ 2021-04-01 12:59 Troverld 阅读(102) 评论(0) 推荐(0)
摘要: X.[COCI2019] Transport 常规淀粉质的题也可以出的非常毒瘤…… 依旧考虑淀粉质。因为这里的路径是有向路径,所以会在分治中心被截成两半,一半从节点到根,记作$FR$路径;而另一半从根到节点,记作$TO$路径。显然,一条$FR$路径只能与来自不同子树的一条$TO$路径拼接,并且这两条 阅读全文
posted @ 2021-04-01 12:58 Troverld 阅读(83) 评论(0) 推荐(0)
摘要: IX.[BJOI2017]树的难题 debug三天,精神崩溃 论一行if(vis[v[x][r].second]){r++;continue;}忘记加上后所有代码全都莫名其妙TLE且查不出锅的痛苦 首先,我们考虑常规淀粉质。 我们考虑一条路径,它会被(淀粉质的分治根)截成两段。如果我们对于分治树中的 阅读全文
posted @ 2021-04-01 12:56 Troverld 阅读(97) 评论(0) 推荐(0)
摘要: VIII.[ZJOI2015]幻想乡战略游戏 题意:求一个树的带权重心,带修改。 现在首位的题解的方法太恶心了,这里介绍我自己的理解。 假设重心为$x$,我们有它的代价为: \(\sum\limits_{i=1}^{n}\operatorname{dis}(i,x)\times val_i\) 其中 阅读全文
posted @ 2021-04-01 12:52 Troverld 阅读(141) 评论(0) 推荐(1)
摘要: VII.[HNOI2015]开店 首先,第一种方法便是动态点分治。 我们先考虑忽略年龄限制的情形。 我们考虑正常求一个点到另一个点的距离应该怎么求—— 一般来说,我们会用$dis(i,j)=dep_i+dep_j-2*dep_{lca(i,j)}$对吧? 这个东西相当于将路径划分成两个部分,其中每个 阅读全文
posted @ 2021-04-01 12:49 Troverld 阅读(80) 评论(0) 推荐(0)
摘要: VI.【模板】点分树 | 震波 我们之前讲过一个叫做淀粉徐的东西,但就跟dfs序一样,把树压成序列,总会损失一些信息。有没有方法能够完整地维护出来淀粉质的信息呢? 还真有。 我们看到在对于某个点淀粉质时,它的所有子树,都会拥有一个下层的分治节点。 我们看到淀粉质的代码: void solve(int 阅读全文
posted @ 2021-04-01 12:47 Troverld 阅读(81) 评论(0) 推荐(0)
摘要: V.[FJOI2014]最短路径树问题 这题已经在我的收藏夹里吃了大半年的灰了……主要是因为他们有人把这题归到了树形DP里面,然后我就傻乎乎地把它收藏了…… 首先,假设我们已经求出了这个“最短路径树”,剩下的就是点分治的板子了。 而这个“最短路径树”,首先可以通过Dijkstra跑出最短路径DAG, 阅读全文
posted @ 2021-04-01 12:37 Troverld 阅读(90) 评论(0) 推荐(0)
摘要: IV.树上游戏 考虑淀粉质。 对于一棵分治树,我们考虑对树中所有LCA为根节点的路径计算贡献。 我们对于根节点一棵子树一棵子树地处理。设$cnt_i$表示子树外有多少条以根节点为一个端点的路径上有颜色\(i\)。则我们当前子树中的一个点的贡献可以分作两部分:子树外的部分(即$\sum cnt_i$) 阅读全文
posted @ 2021-04-01 12:34 Troverld 阅读(89) 评论(0) 推荐(0)
摘要: III.BZOJ3784: 树上的路径 思路1: 淀粉质。用priority_queue维护前$m$长的路径的长度。用multiset维护点分治时,之前所有子树的路径长度,然后对于新子树中的每一条路径,在multiset中从大往小枚举另一半路径拼一起并尝试加入优先队列。如果加入失败,那么对于这个点, 阅读全文
posted @ 2021-04-01 12:33 Troverld 阅读(64) 评论(0) 推荐(0)
摘要: II.BZOJ4675: 点对游戏 (因为C++11的缘故在BZOJ上交会CE) 思路: 我们首先使用淀粉质找出所有长度为“幸运数”的路径数量,设为$tot$。然后,设$f(x)$表示$x$个点间所有的路径数量(即为$\dfrac{x(x-1)}{2}\(),则答案即为\)\dfrac{tot\ti 阅读全文
posted @ 2021-04-01 12:32 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: I.[IOI2011]Race 思路:弱智淀粉质题。唯一缺点就是卡常,卡的要死要活。 具体来说,只需要开出桶来(因为$m$最大只到$10^6$,因此直接处理长度$\leq m$的路径存入桶中求$\min$即可。 代码: #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2021-04-01 12:30 Troverld 阅读(57) 评论(0) 推荐(0)
摘要: I.[URAL1540]Battle for the Ring 这大约是我做的第一道SG函数的题( 很容易想到一个区间DP状态:设 \(f_{i,j,k}\) 表示第 \(i\) 条链子,\([j,k]\) 这一段的SG值。 于是我们枚举这一段中删掉了小于等于某个值的元素进行转移。如果删掉的值形成了 阅读全文
posted @ 2021-04-01 12:29 Troverld 阅读(44) 评论(0) 推荐(0)
摘要: I.CF1458E Nim Shortcuts 我们考虑把一对石子堆 \((x,y)\) 映射到笛卡尔平面上的一个点 \((x,y)\)。 先考虑没有捷径时的方案。很明显,这是简单的NIM游戏,当且仅当直线 \(y=x\) 上的状态是先手必败态。但是,我们有必要搞清楚该结论的由来: 如果对于一个位置 阅读全文
posted @ 2021-04-01 12:28 Troverld 阅读(88) 评论(0) 推荐(0)
摘要: 本文包含一些常见算法的使用技巧。 I.树上最小拓扑序(瞎起名字*1) 本方法适用于一类问题,它要求对一棵树求出它的某种拓扑序${p}$,使得对于排列定义的函数$w\Big({p}\Big)\(有\)\min/\max$。 具体来说,我们会发现这个拓扑序中有一些点,是会在父亲节点被选入拓扑序后立即被选 阅读全文
posted @ 2021-04-01 12:24 Troverld 阅读(110) 评论(0) 推荐(0)
摘要: XVIII.[八省联考2018]制胡窜 首先,本题parent tree上树上倍增+线段树合并找出每个点的 \(\text{endpos}\) 集合应该是没得说的。 于是我们现在考虑知道了 \(\text{enspos}\) 集合以及询问串长度 \(len\) 怎么求出答案。 首先,一个正常人稍微想 阅读全文
posted @ 2021-04-01 12:21 Troverld 阅读(98) 评论(0) 推荐(0)
摘要: XVII.CF666E Forensic Examination 首先,同之前大部分题一样,本题仍然有两种解法。SA解法参见本人的题解。SAM解法见下。 仍然,同之前大部分题一样,本题SAM解法完爆SA——码量、思维难度、复杂度。 首先,考虑把所有东西怼一块跑广义SAM,然后对于询问的原串中某一段区 阅读全文
posted @ 2021-04-01 12:19 Troverld 阅读(70) 评论(0) 推荐(0)
摘要: XVI.CF700E Cool Slogans 这题有SA和SAM两种做法,但事实证明,本题的SAM做法无论在思维难度还是在代码难度上,都爆踩SA做法。 首先,SA做法可以参见本人的题解。 然后,SAM做法见下。 首先,我们一定可以将每个串砍掉一部分,使得我们所需串中,前一个串必是后一个串的后缀。具 阅读全文
posted @ 2021-04-01 12:18 Troverld 阅读(57) 评论(0) 推荐(0)
摘要: XV.CF1073G Yet Another LCP Problem 这里记录一下我在思考本题时的一个感悟,即后缀数组与后缀自动机的等价性。 众所周知,SA时有一个常见思路就是针对 height 数组建一棵笛卡尔树。但是,该笛卡尔树,唯一等价于SA针对的串的反串的parent tree。具体可以分别 阅读全文
posted @ 2021-04-01 12:15 Troverld 阅读(97) 评论(0) 推荐(0)
摘要: XIV.CF1207G Indie Album 听说也可以AC自动机? 首先,我们针对题目中给出的trie树,跑一个广义SAM。然后,考虑我们询问一个串在trie上的某个节点的出现次数,就是询问当我们把此节点及其到根路径上的所有点加入SAM后,parent tree上该点子树中结尾点的数量。于是直接 阅读全文
posted @ 2021-04-01 12:13 Troverld 阅读(52) 评论(0) 推荐(0)
摘要: XIII.[十二省联考2019]字符串问题 首先,我们可以把题目转变成这样:对于一些A类串,其有连向某些B类串的边;对于某些B类串,其又有连向某些A类串的边。要你找出一条权值最长的路径。(此时显然如果成环则答案一定是 \(-1\)) A到B的串题目已经给出了,关键是B到A的串。 我们发现,若某个 \ 阅读全文
posted @ 2021-04-01 12:11 Troverld 阅读(61) 评论(0) 推荐(0)
摘要: XII.CF1037H Security 一开始费尽心思写了个假的SA做法出来,后来才想到SAM做法…… 我们考虑贪心地求出比当前询问的串 \(T\) 略大的串的方法:即先找有没有前 \(|T|\) 位全相同,第 \(|T|+1\) 位最小的串存在于 \([L,R]\) 中,如果没有再去找前 \(| 阅读全文
posted @ 2021-04-01 12:10 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: XI.CF30E Tricky and Clever Password 一开始看错题,硬生生把难度上升了很多…… 所以以下的解法是按照我看错的题意进行的,即 \(S=T_1+S_1+T_2+S_2+T_3+S_3+T_4\),其中 \(S_2\) 是奇回文串,\(S_1\) 与 \(S_3\) 相反 阅读全文
posted @ 2021-04-01 12:08 Troverld 阅读(75) 评论(0) 推荐(0)
摘要: X.CF149E Martian Strings 考虑对于每一个询问串,处理出其每个前缀在原串中出现的最左位置,以及每个后缀在原串出现的最右位置(可以通过建立正串和反串的SAM,然后维护 \(\text{endpos}\) 集合中最小/最大的结尾来在 \(O(|Q|)\) 的时间内求出),然后将两个 阅读全文
posted @ 2021-04-01 12:06 Troverld 阅读(56) 评论(0) 推荐(0)
摘要: IX.CF235C Cyclical Quest 题解 阅读全文
posted @ 2021-04-01 12:05 Troverld 阅读(34) 评论(0) 推荐(0)
摘要: VIII.CF873F Forbidden Indices 只比模板多一点点的伪模板。非常easy。 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,cnt=1; char s[200100], 阅读全文
posted @ 2021-04-01 12:03 Troverld 阅读(65) 评论(0) 推荐(0)
摘要: VII.[BZOJ2555]SubString 如果要在动态建SAM的过程中同时维护parent tree中的子树和,明显需要一种支持修改树的数据结构来维护。显然,这里应该使用LCT。 维护子树和,可以考虑LCT中经典的记录虚子树和的trick。然后剩下就是俩模板的拼接了。 不知道为什么,交上去会M 阅读全文
posted @ 2021-04-01 12:01 Troverld 阅读(77) 评论(0) 推荐(0)
摘要: VI.[TJOI2015]弦论 SAM应用4:求字典序第 \(k\) 大子串。 前面说过,自动机部分接受且仅接受原串后缀,但实际上自动机中节点都是后缀的前缀,即子串。于是在自动机上先倒着拓扑DP一下,然后正着扫一遍即可求出第 \(k\) 大子串。而当相同子串计算多次时,我们知道一个子串的出现次数即为 阅读全文
posted @ 2021-04-01 11:59 Troverld 阅读(71) 评论(0) 推荐(0)
摘要: V.[APIO2014]回文串 具体分析详见本人的SA题解,这里主要是讲解使用SAM求子串出现次数的方法。 SAM应用3:查询一个子串的出现次数。 这个思想很简单,只需要找到该子串对应的 \(\text{endpos}\) 等价类是哪个即可。 我们考虑记录 \(id_i\) 表示以位置 \(i\) 阅读全文
posted @ 2021-04-01 11:56 Troverld 阅读(64) 评论(0) 推荐(0)
摘要: IV.[TJOI2019]甲苯先生和大中锋的字符串 判断一个子串出现几次,我们仍然可以采取之前提到的遍历parent tree的方法。 考虑一个等价类。明显,这个等价类中所有串都出现且仅出现了(等价类出现的次数)。若这个次数恰好为 \(k\),则从类中最长的串到最短的串,所有长度的串的数量都增加了 阅读全文
posted @ 2021-04-01 11:54 Troverld 阅读(51) 评论(0) 推荐(0)
摘要: III.[ZJOI2015]诸神眷顾的幻想乡 假如这棵树是定根的,那么其就可以被看作一棵trie,trie上本质不同子串数可以直接被建立广义SAM解决;但是这棵树不定根,路径可能拐弯,咋办呢? 发现,其保证叶子数量 \(\leq20\)。这就意味着我们可以将以每个叶子为根所形成的trie并在一起形成 阅读全文
posted @ 2021-04-01 11:53 Troverld 阅读(68) 评论(0) 推荐(0)
摘要: II.【模板】广义后缀自动机(广义 SAM) 我们之前提到过一句话:“后缀自动机的构造是在线的,增量的。”而这题,便是其应用之一。 首先,有一种暴力的解法,是直接将所有东西全都依次插入SAM,每次插入从 \(1\) 开始。但是,这样插入完后,如果你输出构建的SAM,会发现有一些点是无法从根到达的! 阅读全文
posted @ 2021-04-01 11:51 Troverld 阅读(121) 评论(0) 推荐(0)
摘要: I.【模板】后缀自动机 (SAM) 虽说是模板但也不是纯粹板子! SAM应用1:求一个子串的出现次数(相当于字符串匹配)。 因为同一个 \(\text{endpos}\) 类中所有东西的结束集合都是相同的,故它们在母串中的出现次数也是相同的。因此,在该类中就应该贪心地选择最长的串,也即 \(\tex 阅读全文
posted @ 2021-04-01 11:28 Troverld 阅读(121) 评论(0) 推荐(0)
摘要: SAM是Suffix Automaton 萨菲克斯自动马桶的缩写,其中文翻译是后缀自动机。 顾名思义,其是一个自动机。SAM接受一个串,当且仅当其是母串 \(S\) 的后缀。 这里我们给出一些定义: 所有使用黑板粗体格式的字符 \(\mathbb{S}\),表示集合; 所有使用大写格式的字符 \(S 阅读全文
posted @ 2021-04-01 11:27 Troverld 阅读(209) 评论(0) 推荐(0)
摘要: XXXVI.LOJ#6198. 谢特 SA+笛卡尔树+01trie+启发式合并模板四合一,省选模板练习必备神器 考虑SA后建立笛卡尔树。问题转换为在笛卡尔树的一段区间中(此时该区间内任意两条后缀的LCP长度均为区间中 \(ht\) 最小值)任意两条后缀的 \(\text{xor}\) 最大值。是经典 阅读全文
posted @ 2021-04-01 11:25 Troverld 阅读(89) 评论(0) 推荐(0)
摘要: XXXV.树上后缀排序 My Solution 阅读全文
posted @ 2021-04-01 11:23 Troverld 阅读(43) 评论(0) 推荐(0)
摘要: XXXIII.CF547E Mike and Friends 实际上是一道很蠢的问题。 我们直接在后缀数组上二分,求出所有拥有串$s_k$作为前缀的后缀所在的区间,则问题就被转换为某一区间中值在$[l,r]$范围内的数的个数。显然是二维数点问题,于是直接离线后树状数组解决。 代码: #include 阅读全文
posted @ 2021-04-01 11:22 Troverld 阅读(69) 评论(0) 推荐(0)
摘要: XXXII.CF1063F String Journey 题解 阅读全文
posted @ 2021-04-01 11:20 Troverld 阅读(27) 评论(0) 推荐(0)
摘要: XXXI.CF666E Forensic Examination 题解 阅读全文
posted @ 2021-04-01 11:18 Troverld 阅读(41) 评论(0) 推荐(0)
摘要: XXX.[CTSC2012]熟悉的文章 题解 阅读全文
posted @ 2021-04-01 11:16 Troverld 阅读(43) 评论(0) 推荐(0)
摘要: XXIX.CF700E Cool Slogans 题解 阅读全文
posted @ 2021-04-01 11:13 Troverld 阅读(37) 评论(0) 推荐(0)
摘要: XXVIII.[BZOJ3277]串/CF204E Little Elephant and Strings 这两题是重题,代码改都不改交上去就能A,故放在一起讲。 网上的大多数SA题解都是$O(n\log^2n)$或$O(n\log n)$的复杂度,太令人不爽了。因此,这里有一种复杂度$O(n)$的 阅读全文
posted @ 2021-04-01 11:10 Troverld 阅读(87) 评论(0) 推荐(0)
摘要: XXVII.[BZOJ4310]跳蚤 我们仍然考虑二分子串。设当前二分的子串从位置$pos$开始,长度为$len$。考虑如何编写check函数。 一个naive的想法便是从前往后枚举所有极大的不存在小于二分串的子串的段,然后将该段数与规定段数作比较。 但是这有点问题——我们发现,这样做每次都是为段中 阅读全文
posted @ 2021-04-01 11:08 Troverld 阅读(73) 评论(0) 推荐(0)
摘要: XXVI.SP7258 SUBLEX - Lexicographical Substring Search 在上一题中,我们二分了后缀;但这里,我们要二分的是子串。 我们设一个$sum_x$表示有多少本质不同子串的字典序小于等于$sa_i$。显然,它是单调增的。则我们可以二分找出$sum_x$小于询 阅读全文
posted @ 2021-04-01 11:06 Troverld 阅读(59) 评论(0) 推荐(0)
摘要: XXV.[JSOI2015]串分割 题解 阅读全文
posted @ 2021-04-01 11:05 Troverld 阅读(32) 评论(0) 推荐(0)
摘要: XXIV.CF123D String 没啥好说的,直接建出笛卡尔树出来,然后统计一下和即可。复杂度$O(n)$,假如你用DC3的话。 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N= 阅读全文
posted @ 2021-04-01 11:03 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: XXIII.[NOI2018]你的名字 题解 阅读全文
posted @ 2021-04-01 11:01 Troverld 阅读(46) 评论(0) 推荐(0)
摘要: XXII.[湖南集训]图森 题解 阅读全文
posted @ 2021-04-01 10:57 Troverld 阅读(70) 评论(0) 推荐(0)
摘要: XXI.[NOI2016]优秀的拆分 这后缀数组越来越像一个用来求$\operatorname$的工具人了…… 对于一个$\text\(的拆分,我们可以在中间切一刀,变成\)\text\(与\)\text$两半。这时,我们只需要设$a_i$表示以$i$为结尾的$\text$串数量,$b_i$表示以$ 阅读全文
posted @ 2021-04-01 10:55 Troverld 阅读(98) 评论(0) 推荐(0)
摘要: XX.【模板】后缀自动机 (SAM) 俗话说的好,模板题怎么能用模板水过去呢 我们考虑用建出$ht$数组,然后用单调栈求出每个$ht$最多能向左向右延伸多远(VI.[AHOI2013]差异),然后直接一边扫过求$\max$即可。 复杂度$O(n)$,假如你用DC3的话。但是用倍增实际跑起来也真的超快 阅读全文
posted @ 2021-04-01 10:53 Troverld 阅读(73) 评论(0) 推荐(0)
摘要: XIX.工艺 /【模板】最小表示法 没啥好说的,直接倍长数组,然后后缀排序即可,道理都在IX.[JSOI2007]字符加密那儿讲过了。 代码: #include<bits/stdc++.h> using namespace std; const int N=600100; int n,m; int 阅读全文
posted @ 2021-04-01 10:52 Troverld 阅读(55) 评论(0) 推荐(0)
摘要: XVIII.[HEOI2016/TJOI2016]字符串 作为一个理智正常的OIer,二维数点的题说什么都应该离线线段树通过而不是大力搞主席树呀((( 我们发现这题询问中$s[c,\dots,d]$中这个“\(d\)”是不重要的,只需要把最终结果同$(d-c+1)\(取\)\min$即可,因此忽略不 阅读全文
posted @ 2021-04-01 10:50 Troverld 阅读(95) 评论(0) 推荐(0)
摘要: XVII.[USACO17DEC]Standing Out from the Herd P 一个naive的思路就是将所有串拼一起然后后缀排序,找出所有连续的来自同一个串的后缀。考虑结合I.不同子串个数思考,则如果该区间是$[l,r]\(的话,它的贡献应该是\)\sum\limits_{l\leq 阅读全文
posted @ 2021-04-01 10:47 Troverld 阅读(67) 评论(0) 推荐(0)
摘要: XVI.[NOI2015]品酒大会 我居然能自己AC NOI的原题,后缀数组果然简单 首先当然是轻松建出SA。 我们考虑借鉴XII.[TJOI2015]弦论的思想,建出笛卡尔树。则对于当前的$ht$长度,它出现在了$(l,r)\(区间里的每一个后缀里,共计\)\dfrac{(r-l+2)(r-l+1 阅读全文
posted @ 2021-04-01 10:44 Troverld 阅读(75) 评论(0) 推荐(0)
摘要: XV.Annihilate 我当年为什么会手贱开这卡常大毒瘤题呀 思路1. 用vector存下每个字符串在后缀排序后的下标,然后每次枚举两个串,用一个vector里面的数在另一个里面two-pointers找到它两侧的数,然后用ST表求LCP。 时间复杂度$O\Big(\sum|S|(\log\su 阅读全文
posted @ 2021-04-01 10:42 Troverld 阅读(144) 评论(0) 推荐(0)
摘要: XIV.[SDOI2016]生成魔咒 动态SA?这怎么办? 我们考虑往每个后缀后面全都加入一个数。很明显,如果这样搞的话,你必须每加入一个数后都要重新后缀排序,不太可能完成。 这时,我们发现,如果这不是加入一个数,而是加入一整条后缀,那就会轻松很多,一个平衡树就能搞定。 思考后会发现,如果我们将整个 阅读全文
posted @ 2021-04-01 10:40 Troverld 阅读(50) 评论(0) 推荐(0)
摘要: XIII.[BJWC2010]外星联络 和上题一样,没啥好说的,直接建出笛卡尔树即可。 代码: #include<bits/stdc++.h> using namespace std; int stk[500100],tp,L[500100],R[500100],id,pt; namespace S 阅读全文
posted @ 2021-04-01 10:38 Troverld 阅读(58) 评论(0) 推荐(0)
摘要: XII.[TJOI2015]弦论 题解 阅读全文
posted @ 2021-04-01 10:36 Troverld 阅读(45) 评论(0) 推荐(0)
摘要: XI.[APIO2014]回文串 题解 阅读全文
posted @ 2021-04-01 10:33 Troverld 阅读(49) 评论(0) 推荐(0)
摘要: X.[SCOI2012]喵星球上的点名 我居然做出了这题……难以置信! 首先,思路很明显是把所有串全怼一起(包括名字和询问串),加上分隔符,然后跑一遍后缀数组。 我们仍然可以用单调栈求出关于每个询问串与它相同的区间。即,如果以询问串为前缀的那个后缀的$rank$是$p$的话,它的合法区间$[L,R] 阅读全文
posted @ 2021-04-01 10:31 Troverld 阅读(64) 评论(0) 推荐(0)
摘要: IX.[JSOI2007]字符加密 这题的思路非常简单——断环复制成链,然后直接后缀排序一下即可。 为什么呢? 我们考虑两条后缀。假如它们在前$n$位中有所不同,显然它们之间的相对顺序不会有问题; 否则,假如它们前$n$位全都相同,则因为反正最后输出的就是最后一个字符,所以相对顺序没有影响,直接按照 阅读全文
posted @ 2021-04-01 10:29 Troverld 阅读(68) 评论(0) 推荐(0)