自我救赎
其实这只是一篇新的考试反思
概率期望(计数)杂题
只需要一个想当然的\(dp\)柿子,顺便移一下项就好。
设\(f(x)\)代表从\(x\)走到\(n\)的最优期望时间,\(a\)序列是\(f(x)\)从小到大的\(x\)。
那个\(a_i\)的确定过程,只需要选择当前集合影响下最小的那个。
\(f(a_i)=1+\sum\limits_{j=1}^{i}f(a_j)p_{a_i,a_j}\prod\limits_{k=1}^{j-1}(1-p_{a_i,a_k})\)
然后再次移个项。
可以把黑白点分开考虑。
对于一个黑点,就是一个常规的柿子,和之前做过的题有点像,然后父子移一下项。
白点的话,考虑一个有意思的转化,经过一个白点,就去掉它的所有孩子,其他点染白,自己染黑。
感觉像是强行把它变成了个叶子。没咋明白。
最终答案维护了一个分式,所以\(dfs\)顺便维护。
(题面越简洁越苟
考虑两个数字之间的位置关系,把所有位置分成\(i\),\(j\),其他位置\(==k\)
然后存在\(7\)种相对位置关系,构造矩阵然后矩乘算每种情况方案数。
(哇他们那个矩阵好帅啊
然后我们枚举\(j\),用一个树状数组来维护有关\(i\)的东西。
实现还需要理解一下。
分别考虑在\(j\)之前和\(j\)之后的。
数列挺长,限制不算特别多,那我们容斥吧。
首先我们把限制按照大小排序,然后对于重复覆盖的我们只需要最小的对吧。
对于每个限制进行\(dp\),转化成黑白两球,白球方案数是\(m_i-1\),每个区间至少一个黑球。
设\(f_{i,j}代表前\)i\(个位置最后一个黑球在\)j\(的方案数\),并且当前考虑到第\(k\)个限制。
对于每个新端点进行\(dp\)就完了。
看着眼熟。
首先我们可以把这个过程看成一个二叉树。
只要一号在路上不会碰到那\(m\)个人就行。
碰到那\(m\)名的原因是其中一个是子树内最小值。
然后我们可以容斥,设\(f(i,S)\)代表前\(i\)大特殊选手在\(S\)子树内是最小值方案数。
从右往左第\(i\)个0,左边一定出现了\(n-i\)中不同颜色。
设\(f(i,j)\)确定了\(i\)个\(0\)以及\(j\)种数字的方案数。
每次考虑最左边的未确定数字,然后组合数,顺便前缀和优化。
首先我们只需要考虑相对大小对吧,所以我们可以考虑枚举不同权值个数。
进行二维\(dp\),转移比较显然,发现\(D\)较大,果断多项式差值。
简 单 计 数
设\(f_{i,j}\)代表前\(i\)个变量最后一个是\(j\)的方案数。
\(f_{i,j}=\sum\limits_{k=1}^{m}f_{i-1,k}+\sum\limits_{k=1}^{m}[k!=j]f_{i-a_j-1,k}\)
然后因为\(a\)序列较小,所以可以优化,一起转移。
/*
因为\(X\)足够大所以可以看成不会有重复位置。
如果我们选择了\(a\)和\(b\),就两两连边,然后每个点贡献是\(2^{dep}\),然后有一个正负\(1\)的系数。
关于这个系数,假设当前点有\(k\)个儿子,然后就有\(\frac{k}{2}\)个儿子状态取反,如果\(k\)是奇数,自己也取反。
所以可以发现一个点贡献系数与父亲奇偶,自己奇偶,儿子个数有关。
具体过程的话,首先发现和父亲有关不好搞所以咱就差分吧。
设\(f_{i,j}\)代表个数为\(i\),最后一层奇数点有\(j\)个,枚举有\(x\)个数和父节点相同,\(y\)个不同。
*/
看不懂呢QwQ
穿越火线杂题
看着眼熟。
\(\phi(n=\prodp_{i}^{a_i})=n\prod\frac{p_i-1}{p_i}\)
理解一下,相当于是每个质因子\(-1\)之后再分解质因数。
每次变欧拉最多\(log\)次,所以我们就模拟前二十次。
之后的质因子要么没了,要么次数连续。
用到了之前常见的一个套路,就是平衡树二分维护选择位置。
(保证下次见到还不会
就是设\(f_{i,j}\)前\(i\)个数选\(j\)个的最大值。
必然存在一个分界点使得左右两边进行不同操作。
然后平衡树维护,没了。
因为某种美妙性质使得美丽串长度只有\(log\)种,看起来好像\(border\)的说。
新的杂题选讲
(令人自闭,播放器炸了55555555555555
如果是一条链并且计数的话,只需要在链上做一个分治\(fft\)就可以,对于每个区间维护\(4\)个多项式。
据说出现了一个叫凸优化的东西,我需要百度好像就是凸包的说。
改变一下多项式定义,变成恰好\(k\)条边的最大权值之和。
单独一条链的话他是个凸函数,差分之后就单调不增。
现在需要一个\(max+\)卷积的操作,就取\(max\)再加起来。
两个凸函数进行上边这种操作也是凸函数。
通过链分治就是分重链,然后扔到树上去。
需要转化一下题意啊。
一个序列是每个数出现至少一次,这个定义可以考虑一下容斥的说。
计数的话要树形\(dp\)。
考虑下暴力,就钦定不选的边,然后树形\(dp\)合并。
设\(f[u][x]\)代表以\(u\)为根并且连通块大小为\(x\)的方案数。
合并子树的过程就相当于一个卷积,当然容斥系数喜闻乐见。
之前做过一个类似粘在一起求方案数的东西。
数学题普遍容斥,枚举每种球然后用一个背包给他怼上去。
人活着就是为了樱岛麻衣
求所有序列的权值和诶,这种题常见可是就是不会。
暴力的话咱就枚举每个颜色的最后一段,然后用容斥统计方案数。
(不行我需要视频
斯特林反演。
设\(f(x)\)是\(x\)行\(m\)列的方阵同时满足任意两列互不相同方案数。
杂题选讲
(5555555555555555555555555不定方程没听懂
讲题人说是联赛题,然而我以为两两异或是指任意两个子序列的异或和再异或。。。
由异或可得最小值一定出现在排完序后的两个相邻元素中,所以\(trie\)优化\(dp\)。
根据取模的定义可以拆柿子。
\(d\)是约数和。
之前字符串专题经常用到的插点法,复杂度优化到\(nln\)。
暴力匹配后可以\(dp\)。
根据期望的线性性,我们要求多少堆石子在第\(1\)堆之前被丢掉。
然后就可以不用管其他的了,考虑两两之间贡献然后加和。
求有多少数是自己删自己。
就是\(\frac{1}{d(i)}\),然后\(min\)_\(25\)筛。
期望线性性,分开算各种颜色。
然后你发现不需要考虑红球,可以考虑无限级数求和,或者数列。
再考虑单个红球和所有蓝球,求出摸出单个红球的概率是\(1-\frac{B}{B+1}^K\)。
主要是贝叶斯,条件概率。
发现拆成区间的话只会影响到当前区间的左端点和右端点,操作分别对应分裂和合并。
然后具体的东西用到条件概率,展开就可以用线段树维护矩阵。
维护\(P[a][b]\)开头是\(a\)事件结尾是\(b\)事件的概率,\(E[a][b]\)是~的期望。
倒着考虑,最左端和最右端不会被删掉。
相当于每个数做出的贡献算是个系数,系数的话发现是左右两边的系数和。
四维\(dp\),设\(f[l][r][x][y]\)代表未被删除的左右两端是\(l\)和\(r\),\(A_l\)贡献是\(x\),\(A_r\)贡献是\(y\)的最小代价。
然后递归两边\(dp\)就行。
对于每个右端点,去找可能做出贡献的左端点。
然后你找出来的左端点就是一个递增的,根据某些正常剪枝的话可以减少不少点对。
要求\(a[r]-a[x]<a[x]-a[x-1]\),蛮好理解,推一下柿子,然后发现每次要减少一半。
行了变成\(log\)了可以做了。
这题做过,轻重点还有高考数学。
部分分一组询问,\(n \leq 10^5\),\(L=0\),考虑一下数位\(dp\),分类讨论。
第一种情况是全部在当前位取到上界,然后我们可以根据一些操作递归到下一层。
第二种情况是至少有一个没有卡到上界,进行一个\(dp\)使得任意选能够满足\(K\)的要求。
复杂度变成\(nlog\)。
考虑正解。
第一种情况没啥区别,继续递归就行。
第二种情况用矩阵快速幂优化dp。
(shen me gui
关于求出真正的答案,用容斥。
一个括号一条边,于是就变成了自环和链。
连通块相互独立,直接\(dp\)。
翻折法,之前遇到过,求两条不向交路径方案数。
卡特兰数,括号序列,出栈序列,二叉树计数,凸多边形划分计数。
网上题解都是多项式和生成函数?
说什么暴力打表发现是卡特兰数?
嘤嘤嘤?
对于一个叶子可以用一个\(pair\)来描述,\(fir\)描述\(n-1\)个点的二叉树,\(sec\)代表能加在哪。
有\(n\)个位置可以新添加叶子,然后就两个方案数相乘除以卡特兰。
这个\(LIS \leq 2\)的要求,可以转换成许多不同条件。
冒泡排序达到下界,划分两个单调上升子序列;要么前面数比它小,要么比它小的都在前面。
这道题用到的转化是:一定与一种前缀\(max\)序列一一对应。
\(y \geq x :\)改点一定在前缀\(max\)上,证明可以用反证法。
\(y<x:\)该点一定不对前缀\(max\)产生贡献。考虑\(A\)的逆置换,就变成之前那种情况了。
对于一个合法的前缀\(max\)序列,满足\(i \geq max[i]\)。
题面给的\(A[x]=y\)相当于固定一部分路径,然后翻折法统计路径数。
暴力是先序遍历整颗树,前缀和优化\(dp\)。
正解的话要考虑组合数的组合意义。
转化成求有多少个长度为\(n\)的非负整数序列\(A\),满足\(A_1=0\)和\(A_i \leq A_{i-1}+1\)。
加个小特判,然后对于第三条来说,转化一下\(P_i=i-A_i\)。
然后就变成什么\(i-M \leq P_i \leq i\),\(P_1=1,P_{N+1}=N+1\),\(P_i \geq P_{i-1}\)。
然后运用到了他所讲的多次翻折法这么个东西来统计路径数。
存在方案等价于每个连通块点数都为偶数,能证明的吧,可以通过树边来调整。
显然边越多越有可能,所以用\(lct\)维护最小生成树。
生成函数
真对不起完全不会数学
前置芝士:
极限,就类似于无限接近这样子。
这个\(U\)叫邻域,意思大概就是从\(x\)开始左右扩展\(d\),加个圈扣掉\(x\)。
好接下来是高考数学。
费马定理,判断极值。
下面那个是极限的性质。
数论
这是一个化柿子的专题。
首先,\(n\)和\(i\)互质,所以和\(n-i\)也互质,所以说两两配对,\(F(n)=\frac{n \times \varphi (n)}{2}\)。
枚举\(\sqrt[4]{n}\),先除掉,\(x\)是除掉的,\(y\)是剩下的。
\(y==1\),已经做完了。
\(x \geq y\),所以\(Y\leq sqrt{n}\),所以\(y\)是个质数。
\(x \leq y\),可得\(n\)是个质数,\(y=\frac{p(p-1)}{d}\),\(d\)是\(x\)的因子。
先换一下柿子,\(\sum\limits_{i=1}^{m}\sum\limits_{d|i^2}1\)。
变化一下,把\(d\)变成质数次幂乘积的形式,所谓的\(h(d)\)就是指数取一半。
\(\sum\limits_{d=1}^{n}\frac{n}{h(d)}\)。
如果\(h(d)\)的某一个质数次幂的指数确定,对应的\(d\)有两种取值。
然后对应搞一下,\(w\)是质因子个数。\(\sum\limits_{j=1}{n}2^w\frac{n}{j}\)。
想办法把\(2\)变成\(01\),抽象成选或者不选,没有平方因子,就是\(\mu^2==1\)。
继续推式子,最终柿子是\(\sum\limits_{d=1}{n}\mu(d)^2\sum\limits_{i=1}{\frac{n}{d}}\frac{n}{id}\)。
前面那个相当于是\([1,n]无平方因子数的个数\),考虑容斥,然后继续用\mu推一下。
\(\sum\limits_{i=1}{sqrt(n)}\mu(i)\frac{n}{i^2}\)。
(题面长到我怀疑人生
这题就各种化简柿子,感觉见过。
将各个部分拎出来分开考虑。
动态添加的思想非常好用。
如果\(n\)比较小的话,从小到大枚举质因数,动态维护。
如果\(n\)比较大的话,运用给定条件,用这些质因数组成的有\(2e5\)个数,然后我们把它搞成关键点。
对于一个\(x\),我们找最大的仅由这十个质因子组成的因数,设为\(y\),就可以求系数。
然后用一个类似洲阁筛的\(dp\)去求一下平方和,然后还是类似于高位前缀和。
分治
这题题解给的是每次对半分,求到达中间的路径然后拼起来。
然后我看这个数据范围不大,分块,然后内部预处理然后拼起来。
也不知道行不行,当初算的复杂度是可以的。
首先你存一下最大值最小值还有长度,这样就可以判断了,\(mx-mn+1==len\)。
然后还是点分治对吧。
两个点\(u\),\(v\),记录一下深度,\(max(mx_u,mx_v)-min(mn_u,mn_v)==dep(u)+dep(v)\)。
我们把三个值当成三维,先按深度排序,之后再\(mn\)排序,就可以树状数组了。
如何去重?
用全部答案删掉当前子树答案。
边分治,多叉转二叉。
选择一条路径,会把它分成两个部分,\(D(x)+D(y)+dis2(x,y)+dis3(x,y)\)。
找第二棵树的\(lca\),叫\(w\),枚举w,两个不同子树中选择\(x\),\(y\)。
\(D(x)+D(y)+dep(x)+dep(y)-2 \times dep(w)+dis3(x,y)\)
然后我们把相同的放到同一个地方去。
第三颗树,建一个虚点,距离是\(dep(x)+D(x)\)。
然后就是维护直径的玄学办法。
枚举\(lca\)的方法肯定不能\(O(n)\),发现\(lca\)是虚树,行搞虚树。
运用之前的玄学生成树算法,每次是不同颜色点积最小。
假设我们先切一半,左右可以互相更新。
抽象成向量后要最小化投影长度。
画出两个向量之后,我们移动一个和\(a\)向量垂直的线,遇到第一个点就是投影长度最小的点。
维护下凸包,斜率排序时候单调移动,\(two pointers\)。
整体二分的话,相当于是分治值域来将询问分裂。
二分第几次操作之后符合条件。
枚举拥有数字然后加起来判断是会否达到要求,并且复杂度是对的。
关于怎么证,我应该是不会233333
第\(k\)大,二分权值,顺便求一下包含当前路径的路径有哪些。
\(dfs序\),又变成二维数点了,对于包含这路径的区间,二维区间加。
离线扫描线,各种玄学判断。
一说相互可达就是强联通喽。
考虑边上两个点什么时候会被缩成同一个强联通分量。
然后我们整体二分。
我们有一个集合\(E\),在加入\([L,R]\)边的时候被缩成一个强联通。
用并查集来维护加入\([1,L-1]\)的连通性,每次\(tarjan\)。
然而复杂度是假的。
然后我们发现,如果一条边没有在左边缩掉,就可以往右边放,不向左边走。
也就是说我们可以使每条边只往一个方向走。
这题看着就邪性。
单点修改看成两种操作,\(0->x\),\(x->0\)。
然后它每次单点修,然后会持续一段区间,把区间拆到线段树上。
首先如果比原值大的话,答案会变大,接下来我们就找到当前值的影响区间内的最大值。
如果我们搞回去,相当于是在历史版本上修改,可持久化。
线段树套个堆,这是最暴力的做法。
维护经过这个区间的路径的最大值。
复杂度三个\(log\),xue微有那么一点高。
考虑一下怎么去掉删除,线段树分治回溯即可。
发现树剖线段树木得前途,去掉它,所以我们二分最大值,判断是否经过当前点。
所以不能交集经过当前点,转化成两个路径求交,疯狂大力讨论。
另外整体二分的做法。
数一下经过\(u\)的路径有多少条,差分,路径数是子树和。
二分是否都经过。
数据结构
倍增并查集,维护成区间连边。
考虑操作二和操作三。
让你单旋就单旋?你咋这么听话呢。
我们想一下对四五操作的影响,发现旋转上去的话,除了它本身的子树,到根的路径及子树深度\(+1\)。
然后子树变成父亲的儿子,原点到根。
然后我们看插入,一定会插入到两个节点之间,一个比它大,一个比它小,其中一个是父亲。
所以插入位置唯一了。
边权只有\(n\)种,所以我们\(krus\)。我们按照说过的找关键点的方法找平方串,而且两个要连起来。
然后就成了区间连边了,同样\(log\)个并查集。
我们处理一下边。如果边两端颜色一样,那么边也有颜色。
后两个操作我们发现维护\(x\)到根的路径上颜色就个数就可以了。
第一个操作变成\(access\)啦,然后我们\(lct\)。
我们在操作的时候会经过所有颜色转化,也就是经过所有轻边。
然后我们可以计算对于点的影响,转化成区间加和区间减,用线段树维护。
(好我们已经颓过标签了是\(lct\)!
我们来特殊处理一下第二个操作。
如果生长节点在树里,那我们在它下面连一个虚点,不然我们在之前生长节点下连一个虚点。
如果存在\(x\),那么连边\(i->x\),不然连边\(i->i-1\),真正的父亲是第一个祖先白点。
第一个操作的话我们就连在最后一个虚点下面。
询问变成了两点之间有多少白色点。
然后我们搞一下扫描线,相当于换父亲,\(cut\)和\(link\)。
现在来处理询问。
找白点个数好说,\(lca\)的话,最后一次虚实转化。(过过脑子?
行了是动态点分治了。
祭出点分树。
/*维护点分树上每一个子树到达当前块父亲的距离。
分成两部分,一部分是原来路径,一部分是向下走,维护一下。
另外说,只被\(log\)个控制,所以暴力维护?
给定只有20个方向,暴力枚举,能走就走。
换根\(dp\)。*/
设\(cnt[u]\)是\(u\)在点分树中代表连通块的点权之和,\(sum[u]=\sum\limits_{x \in {u} } w(x)dis(u,x)\),\(sub[u]=\sum\limits_{x \in {u} } w(x)dis(fa(u),x)\)。
之后各种鬼畜操作?
相当于是从给定的点\(u\)向外一层层的扩展。
每个位置是 \(sum[fa[u]]-sub[u]+dis[fa[u],u]*(cnt[fa[u]]-cnt[u])\)
这是单个连通块到另一个位置之和。
修改的话也很好做。
考虑一个有关系的东西:边双。
我们可以使一个边双变成一个强联通块,就可以变成一个整体了。
然后我们就得到了一棵树,然后就两点距离之和了。
开始修改,动态维护边双。
假设我们加了一个边(u,v)。
如果本来在同一个边双里,就很开心。
如果各自在一个边双里,不联通的话就树上加边,联通的话就缩成一个大边双。
支持查询是否联通,好就决定是你了并查集!
支持加边和提取链,好就决定是你了\(lct\)!
\(Treap\)!然鹅我平常使用\(splay\)的。
看起来好像联赛考试题。
求距离我们需要两个东西,一个是\(lca\),一个是深度。
首先一点,\(K_u \leq K_{lca} \leq K_v\)。
然后我们在符合的点中,\(W\)最大的那个就是\(lca\)了。
下面只剩下到根节点距离了。
小技巧:
先只考虑同一方向,然后去找它的性质。
如果是向右走,首先\(W\)是递增的,然后\(K\)是递增的。
出现了李超树!(线段树维护单调栈
有了上一题基础,大概会好做一点。
既然现在是多棵树,所以我们考虑扫描线。
把插入时间看做权值的话,相当于上面小下面大,也就是小根堆。
查询的话就是路径和了吧,跟上面一样的李超树。
第一眼康上去就是莫队!(跟我木得关系
修改查询在搞上一个线段树,然而复杂度不对。
所以我们莫队加分块!两个传奇暴力不得不说的故事
然而这两个结合的东西叫做回滚莫队。。
因为\(d\)互不相同所以不能直接贪心。
排好序之后我们用线段树维护,记录之前还有多少个数字没有用过。
并且要为子树预留\(s\)个点,做法是给当前点的后缀打一个\(-s\)的标记。
标记的用法是指前面预留了\(s\)个。
在用的时候,不仅当前点并且后缀都要\(\geq s\)。
这个预留就可以实现比较方便的贪心。
然后可以直接线段树二分。
介于不好搞,那我们就拆开。
变成了小于等于\(k\)的点两点不同色。
这时候用到了\(bfs\)序,假设新加入了一个点\(u\)。w是分界点,所以至少有一条链是向孩子方向走的。
设\(dis(u,w)=d,dis(x,w)=a,dis(y,w)=b\);
然后我们有\(a\leq d ---> a+b \leq b+d ---> dis(x,y) \leq dis(u,y)\)。
接下来我们就能随便推推柿子了,找出有多少个\(x\)保证\(dis(x,u) \leq K\)。
这个东西可以用点分树+树状数组解决。
题目这么短一定是道经典题。
先找方差的性质,设\(A\)是平均值,是个形如\(\frac{1}{n} \sum (a[i]-A)^{2}\)的东西。
若\(A\)不为平均值,那么答案会大,运用之前小技巧可以暴干。
每次按照\((W-A)^2\)进行排序,对于两条边来说,只有\(A\)跨过两边边权的平均值时,它们的相对顺序才会变化。
复杂度不对,所以我们变成考虑每条边进出最小生成树。
如果\(i\)被\(j\)换入,首先它们两个在同一个环,然后我们来看环。
每次必定是环中边权最大的顶掉环中边权最小的。
从大到小枚举,打标记,得到了\(m\)个事件,所以我们排序搞一下。
每次找最小值,\(lct\)。
大概要求在线,所以我们先来看看每个人最后剩多少。
从右往左扫描线,\(set\)维护纵向维护横向栅栏,每次比较加入时间。
现在我们要考虑之前和之后的奇妙关系。
对于一个点,我们需要找出在它之前加入且包含它的最后一个,这样我们可以直接加过去。
用并查集,可以找到加入之后和加入之前包含的点。
这个自同构变换相当于是一个有向图。(我还是不理解这题啥意思
他告诉我答案是\(\prod cnt(ch(x))\) ,即\(x\)的儿子的变换数。
要满足什么交换的两个点的子树的形态一样。
判断同构咱就\(hash\)暴干了呗,怎么搞这个\(hash\),每变一次会影响一条链上的值。
(不行我听不懂
分情况。
两条路径\(lca\)相同,\((a,d)\),\((b,c)\),首先统计总收益。
\(lca\)分别是\(x\),\(y\),总\(lca\)是\(y\),所有路径都算两遍。
权值分成三个部分。
枚举\(x\),我们把一条路径的贡献算到单点上变成\(val[a]\)。
\(val[a]+val[b]-dis[y]+dist(c,d)\)。
像最远点对?(wobuzhidao
用到之前求直径的结论,四选二。
接下来\(lca\)不一样的情况,依旧设。
和上面的过程差不多。
设\(f(u,d)\)代表一个端点在u的子树当中\(lca\)深度为\(d\)的最大值。
在设一个\(g\)数组,\(g=f+dis(lca)\),可并堆合并。
离散化,变成一段段,扫描线?
可以知道当前有哪些区间\(i\)。
(gu
出现了打怪兽!
倒过来做,先在根上放,然后移到儿子。
每个点存个\(pair\),分别是总的增加量和历史最大值。
先扔掉树上关系,比如说我们现在有了两个\(pair,(S_a,M_a),(S_b,M_b)\)。
如果两者前一个正负性不同,先打负的,要最小化历史最大值。
如果都是负的,先打\(M\)小的。
如果都是正的,先打\(S-M\)大的。
每次搞出可以搞的最小的。
接下来考虑初始点不是根的情况。
向上合并的话,可能是根,可能是链,所以说当前答案会影响到一条链,树剖。
我们可以把它看做好多段并起来。(gu
字符串
这玩意可以看成是随机的。
然后我们发现如果长度过大会导致相同几率近似0所以我们不考虑。
考虑长度\(L<=100\)的。
设当前有一个字符串是\(T\),然后我们考虑求出这个\(T\)是多少个\([i,j]\)的\(border\)。
避免算重我们考虑容斥。
设\(W(S)==|S|-max(border)\)。
我们可以的到\(\sum\limits_{{T}\in border(S)} W(T)=|S|\)
枚举\(T\),如果\(T\)出现了\(x\)次,我们认为它做出了\(|T|\times C_{x}^{2}\)的贡献。
如何求\(W(T)\),如果是给定\(T\)的话,只需要一次\(kmp\)。
然后它均摊复杂度是对的。
有个神仙的生成树算法。
算法流程大概是每个连通块找一个最大的边,然后选边就行。
会进行\(log\)轮,所以复杂度是对的。(莫名感觉和\(krus\)有点像
随机数据:
\(lcp\)长度的期望是\(log\)。
这题建两棵\(trie\),然后我们发现\(lcp\)为\(dep[lca]\)。
我们枚举\(lca\),在子树内进行合并可以得到形式为\((x,y)->lca\)的映射,数量级是\(nlog^2n\)。
拎出单个串,在两个\(trie\)的对应节点是\(S[i]\),\(T[i]\)。
向上枚举\(u,v\),排除掉已经在同一个联通块的点。
而且因为从下向上枚举,所以边权保证最大。
如果数据不随机的话,我们来分轻重点。
设置一个分界点\(B\),长度大于\(B\)为重点,反之为轻点。
重点个数是\(\frac{n}{B}\)个,所以两两暴力匹配是\((\frac{n}{B})^2\)。
接下来是轻点,我们发现\(len>B\)的部分没有用了所以我们切掉。
然后总复杂度是\(nB^2\)。
我们取\(B=\sqrt[4]{n}\)得到最优复杂度。
(重复提醒需要贼鸡儿精细的写法2333
要求在给定串\(S\)中找出一个最大的\(T\)使得\(T\)是\(S\)的前缀且\(T\)出现一次以上。
我们考虑若\(T\)已知,试着求出\(S\)的方案数。
设\(dp[i]\)代表\(T\)这个串第二次出现位置是\(i\)的方案数。
不重叠的话就直接快速幂,下面来考虑重叠。
设第二次出现位置为i,如果重叠的话相当于一个条件:\(|T|-i\)是\(T\)的\(border\)。
然后我们去掉不是\(border\)的那些再乘上一个\(dp\)即可。
根据上面的过程我们发现\(S\)的求出只与\(border\)有关。
接下来我们考虑从\(T->border\),设\(T\)的最长\(border\)是\(L\)。
根据“\(border\)的\(border\)也是我的\(border\)”,我们选择最长\(border\)递归下去。
而且合法集合不会特别多,大概不到\(1e6\)。
(wo zai shuo sha
先考虑\(f(S,T)\)咋求。
最开始我们可以去掉相同前缀和相同后缀,现在剩下两个串的首位字母都不一样了。
设\(|A|=x\),\(|B|=y\),不妨设\(x<y\),然后\(A\)就是\(B\)的\(border\)。
我们把整个串替换掉之后展开发现,后面的\(x\)长度也是\(A\),最终发现\(B\)是\(A^{inf}\)的前缀,即\(A\)是\(B\)的\(period\)。
从后往前看,我们发现串\(y-x\)是\(B\)的\(period\),是类似的。
列个式子并用上一个没听说过的弱周期引理。
得到\(gcd(x,y)\)是\(B\)的\(period\)。
我们设\(C\)就是这个串,还是两个串的整周期。
设\(A=C^a\),\(B=C^b\),所以现在只需要\(C\)的个数一样就可以了。
接下来枚举\(A\),\(B\)的长度就可以得到\(f(S,T)\)了。
现在这个复杂度是\(N^2\)的,接下来该优化了。
设串\(S\),\(T\)中\(A\),\(B\)的个数分别为\(S_A\),\(S_B\),\(T_A\),\(T_B\)。
相等条件变成了\(S_Ax+S_By==T_Ax+T_By\),整理成一个形如\(px==qy\)的柿子。
接下来大力分类讨论,分零和非零接下来好像就是数学了。
现在才刚刚求完\(f(S,T)\)。
下面是数学环节(雾
分别搞出几个变量代表串\(S\),\(T\)分别代表\(A\),\(B\),\(?\)个数。
然后我就哭了
很显然反过来就后缀\(lcp\)了是吧,这时我们选择使用后缀树,转化成\(dep[lca]\)。
枚举\(lca\),如果子树中有很多点,比如有\(4\)个,分别是\(A\),\(B\),\(C\),\(D\),设大小关系递增。
我们发现\(lca\)包含在\([l,r]\)区间内当且仅当\(L\leq 相邻两点 \leq R\)
然后就离线扫描线,每次启发式合并。
最小表示法就是循环同构中字典序最小的那个。
我们搞出一个前缀\(k\),现在要找它的最小表示法。
定义集合\(P_k\),若\(i<j\)且\(i,j \in P_k\),则\(lcp[i->k,j->k] > k-j\)
然后我们就发现了\(P_k\)是\(P_{k-1}\)的子集,转移的话只考虑相邻两个。
若\(i<j<k\),且\(i,j \in P_k\),并且\(k-j \leq j-i\),发现\(lcp\)重合了,得到\(S[i->j-1]\)是\(S[k]\)的周期。
(画图可得2333
拎出从\(i\)开始的循环同构,因为\(lcp\)的缘故,所以会形成一个\(AAB\)形式的串。
\(AAB\)的性质是啥?考虑不同的轮换,发现\(B\)不能在中间因为字典序不优。
而\(ABA\)形式是从\(j\)开始的循环同构,所以\(j\)没用了。
为了保证集合合法所以每次距离翻倍,集合大小变成\(log\)。
然后出现了我不会的\(exKMP\)。
\([L,R]\)表示所有已经和\(S\)匹配的串中右端点最大的那个。
根据定义来说\(S[L,R]==S[1,R-L+1]\)。
(不行我需要找个人问问
我们发现每次找出最大串,我们不需要之前的了所以可以把头尾去掉。
这样我们就可以操作使得每次搜的时候都变成\(border\)。
再来观察一下,既然每次都是\(border\),就变成了前/后缀啊。
建出\(sam\)之后相当于每次从父亲转移,转移条件是多次出现。
判断是否在区间内且存在结尾即可。
行了开始动态维护\(endpos\)集合了。
用线段树维护出现集合,就变成了区间求和。
线段树合并。
广义\(sam\)。
我们相当于是给每一个串的子串打上一个标记。
当然就是前缀的后缀啦。
标记的时候就顺着\(par\)向上走。
然后搞一下标记的乘积。
根据某些玄学证明复杂度是正确的。
我们发现G[i]代表前\(i\)个串中每个子串出现次数的平方和。
也就是说我们需要维护\(endpos\)集合大小喽。
进行树剖,链加和单点修,随便维护一下?
首先如果要赋值肯定是越长越好啊。
我们找出对于每一个右端点\(R\)对应的最长左端点,容易发现是单调的。
首先我们搞出个\(sam\)来。
我们设\(T=S[L+1,R]\),如果存在这样的串,那么也会有一个对应节点。
如果\(R\)变大了,对应是我们往后加一个字符,相当于沿着转移边走,如果有就可行。
如果不可行,需要\(L\)增大,判断是否仍在当节点,不在的话相当于跳父亲。
找完这些之后就可以\(dp\)了。
那个\(g\),就是本质不同子串啊,直接用后缀树会很麻烦。
然后我们决定维护\(01tire\),然后按照\(L\)从小到大求。
移动左端点相当于去掉根?然后我们直接大力合并。
同时维护每个深度有多少点就可以求出每个\(g\)。
但是没办法直接存对吧,结果我们发现\(g\)的值存在于[1,m]。
设\(R[l,k]=min(r)\),此时\(g[l,r] \geq k\),以及 \(L[r,k]=max(l)\),此时\(g[l,r] \geq k\)
求法就是在维护深度时就修改一下,预处理复杂度\(nm\)。
\(dp[i]\)代表前\(i\)个位置划分好时最大总价值。
枚举\(r\)枚举\(g[l,r]==k\),然后相当于我们要把介于\(L[r,k+1]\)和\(L[r,k]\)中所有的\(l\)转移到\(r\)。
这是有一个小技巧:
我们发现\(p\)是非负的,所以就算转移时\(g[l,r]\)会偏小,但并没有影响。
所以我们只需要\(g[l,r] \geq k\)即可,也就是\(l \leq L[r,k]\)。
考虑每一个\(l\)能改变那些\(r\),也就是\(r \in [R[l,k],R[l+1,k])\)。
如果当前\(k\)固定了,那么每个\(L\)影响的范围是不交的。
我们从小到大枚举\(k\),然后我们考虑如何查询前缀\(l\)的最小值。
不难发现是个斜率优化的形式,所以我们平衡树维护凸包,每次合并区间。
68分部分分是询问全区间,我们来想想咋做。
首先建\(sam\)求本质不同,然后我们在\(sam\)乱跑,至于跑法和上面一道题是类似的。
现在我们把限制加上。
我们加上一个线段树合并维护\(endpos\)集合,区间查询。
我们来想\(dp\)转移的本质。
我们先设\(S[i,i+L-1]==S[i+L,i+2*L-1]\)。
我们建两排点,如果相等连边,边再搞一发边权,转移就是从边上走。
然后来优化建图。
有两个问题,一个是如何求出用来建图的\(i\)和\(L\),另一个是如何减少点数和边数。
第一个问题的解决很经典啊,钦定关键点,向左求再向右求,就能优化成\(ln\)。
第二个问题,我们可以把循环节弄的越小越好。
如果循环节内部不循环,我们称之为本源平方串,它的一个性质是一共有\(nlogn\)个。
先来看离线怎么做。
然后你就会发现第三个询问在逗你开心。
第二个询问的话,我们维护每个节点对应的子树中每个串占有多少个节点,大概要可持久化?
维护每个串的\(endpos\)大小?
然后我们开始搞\(lct\)来维护\(sam\)的过程,修改\(endpos\)就是\(access\)链加。
讲课 2020.02.17
我才意识到我应该看一道写一道
我写的实在是太慢了
数学:
提纲?
昨天晚上主要看的是当天上午的数论。
今天回去从头会看组合方面的东西。
数学方面一直是个弱项,然后接下来是口胡题解。
首先我们考虑\(F==1\)的情况。
设\(b[i]\)代表\(i\)位置出现的数字。
所以\(a[x]=\sum\limits_{i=1}^{n}[b[i]==x]\)。
分配律展开就代表了\([1,L]\)各选一个方案数。
设\(x[i]\)为每个颜色出现位置。
如果重了就会出\(0\),反之合法。
所以答案就是\(\frac{n!}{ L ! \times k ^ L}\)。
当\(F>1\)时,就变成了一个二维矩阵,一维\(L\)一维\(F\)。
当前变成\([1,L]\)选\(F\)次。
如果有两个数字重复并且不在同一行,那么不合法。
当前矩阵有\(p\)种数字,所以概率为\(\frac{1}{k^p}\)。
考虑如何求出合法序列。
相当于\(p\)个元素放入\(k\)个盒子,不同盒子不能有相同权值。
如果出现\(x\)种数的话,可以看做\(F\)个不同权值划分\(x\),斯特林。
首先\(crt\)没的说。
单拎\(p^e\),如果\(p\)的指数\(>e\)就会\(mod\)掉,把\(i\)变成\(ap+b\)的形式。
二项式定理展开,枚举上界减小,变成\(log\)。
把\(a\)变成完整循环和不完整循环。
设\(a\)完整循环到\(A\),不完整循环可以直接算。
完整循环的柿子是\(\sum\limits_{i=0}^{A}i^x\sum\limits_{j=0}^{p-1}j^{k-x}\)
然后两边独立分开算,然后预处理斯特林啥的。
首先考虑序列问题,只需要枚举最后一段就可以\(dp\)。
设\(a[i]\)代表颜色\(i\)有\(a[i]\)段
设\(f[i][j]\)代表用\(i\)种颜色分\(j\)段贡献,此时不考虑相邻。
然后对于每个\(a\)序列的贡献就是\(W(a)\prod\limits_{i=1}^{n}f[a[i]][c[i]]\)
我们考虑这个\(W(a)\)怎么求。
首先我们需要一个\(b\)数组代表至多,然后\(a[i]\)变\(b[i]\)是个插板。
然后柿子就是\(W(a)==\sum\limits_{b}\frac{(\sum\limits b_i)!}{\prod b_i} \prod (-1)^{a_i -b_i} C_{a_i-1}^{b_i-1} F[c[i]][a[i]]\)
接下来就可以\(dp\)了,然而时间复杂度不对。
现在仍然是个序列,考虑怎么算环的贡献,我们需要固定一种划分方式。
所以选择在一段\(1\)的开头划开,就可以统计了。
然后关于优化方面,可以看到是一个减法\(fft\)。
然后那个求\(f\)的过程据说是插板。
将每行每列排序,之后从右下角开始枚举。
分成两种情况,矩形和\(L\)形,然后分类讨论。
柿子好麻烦的说。
no
这道题抽象成一个矩阵,横着是\(yes\)竖着是\(no\)(反过来也行
每次的固定转移类似是\(\frac{max(x,y)}{x+y}\)。
我们发现,每一斜的分母是固定的,所以我们去搞分子和。
画出一个表,之后我们看哪两个相邻位置之间的分子发生变化,并记录。
这时我们在当前位置的时候走的方向是固定的。
需要用组合数来计算合法路径。
然后我们就可以在斜线之间转移了。
复杂度线性,好难想。。
这题我们考虑枚举最小值。
暴力做法是\(ans_k=\sum\limits_{i=1}^{k}T^{i} C_{n-i}^{k-1}\)
变一下,我们枚举最小值至少是多少。
\(ans_k=TC_{n}^{k}+\sum\limits_{i=1}^{n-1}(T-1)T^{i}C_{n-i}^{k}\)
联立之后可以得到一个递推式。
继续化简。
省选模拟11 2020.01.18
有点太浮躁了。。。\(T2\)还蓝了。。。
\(T1:\)
\(min\)_\(25\)筛大神题,不会先咕着。
\(T2:\)
第一看上去广义\(SAM\)对吧然后就不会了
观察题意发现给出了一棵\(trie\)树我没看出来
所以说两个点的\(lcs\)就是\(trie\)树上的\(lca\)的深度了。
我们建出广义\(SAM\)之后再建出\(par\)树。
然后我们发现\(lis\)也变成了\(lca\)的深度。
我选择在\(par\)树上维护\(trie\)树上\(lca\)深度最大值。
线段树合并比较巧妙,每一个点插入的位置是对应的\(dfs\)序。
比较显然的一点是,\(dfs\)序相近的两个点的\(lca\)的深度会更大。
所以我们在合并区间的时候,维护左儿子最大值和右儿子最小值进行更新即可。
\(T3:\)
感觉是之前没见过的类型。
动态维护排名,单点插入,所以我们选择优秀的\(splay\)。
最外层二分答案找出前驱之后,\(splay\)到根插入即可。
注意去重。
省选模拟10 2020.01.17
这场本来运气挺好的,然后被自己搞死了。。
\(T1\)是思博题,然而我只拿了20分少了个特判。
\(T2\)数据足够水然后我水过了大数据结果暴力\(T\)飞了。。
省选模拟9 2020.01.16
不得不说提答还挺好玩的虽然一分没拿到23333
\(T1\)写了个暴力然后yy了个分块结果伪了
\(T2\)暴力升天
\(T3\)一个样例都没过kuku(貌似输出文件没输出完
\(T1:\)
我感觉挺神的。。。
顺便学了一下虚树。
化柿子挺麻烦的,然后要学会考虑各类函数的性质。
\(T2:\)
首先一定会有一只猪在所有的三元环里,所以我们把它扔掉,剩下的两个建边。
暴力是枚举两只猪,判断剩下的能否形成二分图。
我们考虑一下正确性。
如果剩下的部分可以形成二分图,那么这两部分可以看作是相互独立的。
也就是说最飘的那只猪不管在哪里都不会出现矛盾。
正解选择对其优化。
枚举一直猪,然后考虑能否去掉一直猪使得剩余部分为二分图。
我们知道成为二分图的条件就是没有奇环对吧。
然后我们搞出\(dfs\)树,剩下的边分为奇边和偶边。
然后删掉点的条件是在所有的奇边内并且子树到祖先不会同时存在奇边和偶边。
\(T3:\)
没改不会。。。
省选模拟8 2020.01.15
神仙\(T1\)需要判零233333
\(T2\)没有仔细想。。
\(T3\)是个乱写。。
\(T1:\)
无脑线段树可以拿80前提是你把0判掉
想到分块了,但是不会维护。
区间加维护标记,区间\(max\)塞\(vector\)。
修改的次数可以在\(vector\)里\(upper\)_\(bound\)。
然后因为卡内存所以我们考虑进行一些操作后暴力重构。
\(T2:\)
\(subtask1:\) \(K\)为奇数,然后我们在两点之间走\(K\)次就可以使贡献为\(0\),判联通即可。
\(subtask3:\) 所以这个是判奇环。
接下来开始口胡
首先在同一个联通块内,我们除掉所有边和\(K\)的\(gcd\),除完\(gcd\)就为\(1\)了。
然后根据\(skyh\)的证明可以得到此时经过所有边使得贡献变成\(2\)。
如果有奇环那么可以改变奇偶性,然后使得贡献为0。
所以两点之间路径如果为偶,那么就是0,否则是1。
\(T3:\)
是个网络流,我们让反向边为\(inf\),就可以不割反向边。
然后我就不会了。。。。
省选模拟7 2020.01.14
弱的确不可否认,但如何面对也是个问题。
\(T1\)看了大概想出了正解但是扔了。
\(T2\)写了一个类正解的东西但是在考试结束前差两个边界。
\(T3\)真不会。
\(T1:\)
考场上看了一眼觉得是状压,然后觉得要将两个硬币之间的段也压进去。
但是以为没办法搞然后就扔了。。
实际上我们可以预处理反转连续一段所需要的长度。
然后\(topu\)更新即可。
其实上文我在扯淡。
因为有长度的限制导致预处理出来的不一定在每个位置都合法。
所以我们可以考虑每个地方\(bfs\)来处理步数。
然后数据太水了所以我\(A\)了。
\(T2:\)
看到区间问题就感觉是线段树。
然后就开始犯傻逼了。
我写了一个\(n^3\)判断每个位置不同长度是否有回文串。
然后傻逼\(hash\)可以做到\(n^2\)求。
然后神仙\(manacher\)可以做到\(n\)求。
然后你就\(A\)了。
\(T3:\)
只写了\(5min30\)。
然后发现排序后\(n^2\) \(dp\)可以拿60分。
然后打表发现每加入一个新元素会有分界点,前面无影响,后面加入。
后面区间加,然后单点插入。
所以用\(splay\)维护。
省选模拟6 2020.01.13
\(T3\)挂了点分,原因是我天真的认为\(LIS\)会出现在末尾。
\(T1\)基本是想到了,但还是差了一点。
他们说\(T2\)是\(SAM\)思博题,但我写的\(SA\)而且是暴力。
\(T1:\)
手玩一下发现是高考数学,但是统计答案非常恶心。
运用到了之前见过的一个思路,根据度数划分轻重点,轻点直接处理出来。
\(T2:\)
是一个基于\(SAM\)的树形\(dp\)。
首先建出\(SAM\)之后发现每个串做的贡献就是\(endpos\)集合大小。
向前和向后加字符可以看作在\(SAM\)上走或者在\(par\)树上走。
我们每次走到一个点都会在它没有价值之后移动。
\(dp\)即可。
\(T3:\)
神奇的\(BIT\),到现在还没调出来。
要求求出\(LIS\)和\(LDS\)并且两者没有交集。
一个非常巧妙的性质:\(LIS\)和\(LDS\)的交集最大为1。
然后我们可以正反跑两边求出所有\(LDS\)的方案数\(ALL\)。
设\(fa[i]\)为经过\(i\)点的\(lis\)的方案数。
若求出的LIS不合法,那么\(\sum\limits_{i \in S}f[i]=ALL\)。
同时运用上文性质,同时维护两个\(LIS\),必定有一个合法,于是解决问题。
碰见的套路不能忘。。
MouDing学习OI的态度出了大问题,这可了不的
省选模拟5 2020.01.11
反正我是没想到我手一滑把我之前没改的\(T1\)交上去了2333
\(T1\)本来以为是个dp,然后以为是个网络流,然后想了一下发现就是个贪心。
\(T2\)一看是个柿子,还是自然数幂和,想了一下忘了伯努利数的柿子,然后打完暴力就跑。
\(T3\)写了树剖和网络流,树剖忘记了写\(lca\),还是细节不到位,然而裸网络流有40。
还是挂分挺严重的。。
\(T1:\)
我们可以考虑大力贪心,每只蛤跳最远,然后在最后用最便宜的蛤去踩石头。
当然如果一块石头与前一块距离符合条件而前一块也被踩过是可以将当前石头当成踩过的。
\(T2:\)
不需要想什么消去复杂度什么的,直接大力伯努利就完了。
\(T3:\)
虽然最后还是搞出来了,但是数组开小和变量用错让我tm挑了快4个小时是不是非常不友好啊
发现是一个动态的问题,直接搞可能不行我还以为有什么可持久化SAM就算有好像也没法统计答案
我们维护一个数组\(las\)代表\(endpos\)集合中最大元素。
建好\(SAM\)之后考虑对答案的贡献,设当前已经插入到了第\(n\)个节点。
一种是作为\(par\)树的叶子节点,另外一种是插入到\(x\)和\(f[x]\)的中间。
我们发现每次都会改变从当前节点到根的\(las\)。
考虑改变时会对答案造成什么影响。
设\(x\)为当前节点到根路径上的任意一点,\(las\)数组代表的是修改之前的\(las\)
如果左端点小于\(las[x]-len[x]\),那么这一整个串都能再次被找到,贡献也就是\(len[x]\)。
而在\(las[x]-len[x]\)之间,就是一个等差数列变化的贡献。
用主席树可以动态修改但复杂度不对。
然后我们发现修改过程其实是\(lct\)的\(access\),即打通路径。
但是要满足一个性质:一棵\(splay\)上的节点的\(las\)全部相同。
也就是说我们不能随便\(access\)什么的,细节较多。
下回我一定老老实实封装mdzz。
省选模拟4 2020.01.10
沙雕MouDing在考数学的时候,他会倒数;
沙雕MouDing在考模拟的时候,他会CE。
\(T1\)本来一开始以为是网络流,然后发现是一个\(O(n)\)的\(dp\)就是建图很麻烦。
想了半天觉得不是很会,想了个乱搞剪枝然后觉得容易被卡就没写然后D哥A了woc
\(T2\)看起来很不可做,然后随便打了个表发现了规律,然后打了暴力。
然后\(T3\)是个仙人掌就歇比了
\(T1:\)
比较显然的题目给出圆不会相切或相交,所以圆的相对位置不会改变。
然后我们就可以将圆按照顺序插到平衡树里来。
并且我们在外面改变横坐标时不会改变平衡树结构。
比较巧妙的一点是可以把一个圆变成上下两个半圆,查前趋即可。
\(T2:\)
根据D神仙的证明,可以把题意转化成连续一个区间的\(lcm\)。
然后开始构造一个数组\(D_{n}\)。
然后这个\(D\)数组满足\(\prod\limits_{i=n-k+1}^{n}D_n=lcm(n-k+1...n)\)
现在我们假设有了\(D_{n-1}\)数组然后去构造\(D_{n}\),并让\(D_{n}[n]=n\)。
我们发现它其实并不一定满足条件,然后我们要除去D中多余的质因子。
假定我们目前在搞\(p^q\),我们只需要枚举恰好是\(p^k\)的最大的数,其中\(1 \leq k \geq q\)。
因为之前也是类似这个过程所以其它的数都已经被消过了,然后我们直到将\(q\)消完。
这个过程可以用主席树维护。
数学专项测试3 \ \ 2020.01.06
反正我估计着出题人已经为国家处理积压子弹了
\(T1\)看了一脸懵逼。
\(T2\)感觉找出了规律然后伪了,不知道哪里没开\(longlong\)搞得10分都没有。
\(T3\)读错题了,给出了点值但是我当成系数了然后就歇逼了而且还不会拉格朗日(现在也不会
\(T1:\)
大神题,预处理了多个数组然后神仙转移。
现在只记得定义了估计是鸽了。
\(T2:\)
是个杜教筛,柿子还行但我没想到。
估计我能口胡的只有这个了。
我们发现如果满足要求就不能循环,一旦循环后面就会补零所以一定不对。
然后这么多数一定有最小的一个,最小的一定在最前面,所以会对排列有限制。
我们目前求长度为\(x\)时的合法方案数,就是
答案就变成了
后边那个是高考数学,所以我们不管它
关于前面这个东西,我们发现可以卷一个\(Id\)
设
也就是
所以我们有
所以就嘿嘿嘿
\(T3:\)
我没改出来
\(T2\)是真的没想到,\(T1\)还是没法想
数学专题测试2 \ \ 2020.01.04
\(T1\)是见过多次的套路题,但是还是想了很久而且小优化没想到。
\(T2\)感觉是一个构建矩快的东西,然而忘记了处理负数导致没分。
\(T3\)是没有写过的\(MTT\),而且在考场上也没想多项式,打完暴力就跑。
\(T1:\)
我们发现简单列一个容斥柿子并且预处理一些组合数就变成了杜教筛模板题。
\(T2:\)
运用到了\(BSGS\)的思想,说实话已经忘的差不多了。
打一个表可以发现有循环节,想着循环节会很大但其实并不大。
运用\(BSGS\)的思想我们可以快速找循环节,然后可以作为下一层的模数带入。
然后递归实现,避免被卡常可以写一个\(hash\)。
其实考场上想到了循环节但是不会写XD。
\(T3:\)
可以把原数看作一个多项式的形式,大力化简就变成了任意模数\(NTT\)。
由于时间不是很充裕于是就不补柿子了。
\(T1\)浪费的时间有点太长了,而且没有A掉。
细节处理不到位,想这种负数应该要想到。
多项式的话估计只能看脸了2333
数学专题测试1 \ \ 2020.01.02
数学大概一直是噩梦吧。。
考场上发明\(crt\)失败,然后不会\(exLucas\),然后还不会\(FWT\),然后就死了。
\(T1\)是\(exlucas\)的板子(大概,具体在另外一篇里自用
\(T2\)用\(FWT\)能50分,然后我们观察模数较小,也就是说有循环节,所以我们倍增处理循环节。
至于具体做法和大神\(T3\),我已经忘了。
总体来说还是知识的欠缺,现在大概是在补坑,但希望补坑能把坑填满,不能空心。
我有必须去做的理由。