01 2019 档案
摘要:我们先用树形DP,求出选取集合S中的点,满足连通性的但是标号可重的方案数,贡献给F(i)(1$\leq$i$\leq$$\mid S\mid$),也就是我们要处理出F(i)代表取至多i个点的方案数。 然后容斥一下就求出恰好选i个点的方案数。 卡一下常就能过了。
阅读全文
摘要:luogu2257 YY的GCD 答案为: $\sum\limits_{p\in prime}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)==p]$ $=\sum\limits_{p\in prime}\sum\limits_{i=1}^{\
阅读全文
摘要:题目大意: 设$f(i)$为使$(x+y)^i \equiv x^i (mod\ p)$成立的(x,y)的对数。其中$1 \leq x \leq p 1 , 1\leq y\leq m$,m,p给定且p是一个质数。求$\sum_{i=1}^{p 1}i f(i)$,p 1$。 所以可以得到这样的k的
阅读全文
摘要:设$cnt[i]$为权值为i的倍数的数的数量。 $f0[i],f1[i]$分别为两种方法$gcd=i$的贡献是i的多少倍。 $F0[i],F1[i]$分别为两种方法$gcd$为$i$的倍数的贡献是i的多少倍。 $F0[i]=\sum_{j=1}^{cnt[i]}A_{cnt[i]}^{cnt[i]
阅读全文
摘要:斐波那契数列的通项: $$\frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2}) (\frac{1 \sqrt{5}}{2}))$$ 设T=$\sqrt{5} N$,$y=\frac{\sqrt{5}+1}{2}$ 原式可化为$y^n ( \frac{1}{y}^n) \
阅读全文
摘要:写在前面 文章作者实力有限,本文可能有个别错误,如有错误请友好地指出。 高次同余方程就是$x^a\equiv b(mod\ p)$ 二次同余方程就是$x^2 \equiv b(mod \ p)$ 我们接下来讨论解这两种方程的方法。 那么有一个问题。既然知道了高次同余方程的解法,就可以直接用解高次同余
阅读全文
摘要:考虑两一个暴力 1 因为询问$[a,b]$可以拆成$[1,b]$ $[1,a 1]$所以把询问离线,然后就是求$[1,x]$中被$S_i$包含的串的数量。考虑当$[1,x 1] [1,x]$时我们把$S_x$结束节点在fail树的子树加1。然后询问就是求$S_i$在AC自动机上跑时经过所有点的点权用
阅读全文
摘要:~~SAM+线段树合并的裸题。~~ 但我们讨论AC自动机的做法。 先建出AC自动机。考虑询问在[a,b]中出现的次数就是$[1,b]$的出现次数 $[1,a 1]$的出现次数。把询问离线。然后我们要求的就是第i个字符串在$[1,x]$中出现次数。我们在从$[1,x 1]$到$[1,x]$的过程中把$
阅读全文
摘要:建立AC自动机然后,加入一个串之后考虑这个串的贡献。我们把这个串扔到AC自动机里面跑。最后对经过每一个点到的这个点在fail树的根的路径上的点有1的贡献。求链的并,我们把这些点按DFS序排序,然后把每一个点加1,每个点与上一个点的LCA 1,然后询问时的答案就是子树和这个用树状数组维护就行。至于为什
阅读全文
摘要:建出Trie树然后求出一个点子树中有多少笔名和真名。然后贪心匹配即可。 cpp include include include include include using namespace std; const int N=810000; int ans,n; char s[N]; struct
阅读全文
摘要:我们预处理出来以i为结尾的最长回文后缀(回文自动机的构建过程中就可以求出)然后就是一个区间覆盖,因为我懒得写贪心,就写了线段树优化的DP。 cpp include include include include include using namespace std; const int N=101
阅读全文
摘要:给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数。 如有多解输出最靠前的那一个。 我们首先对m个字符串数组建出后缀自动机,然后我们可以通过跳trans边找到S前i个字符代表的前缀的最长后缀。我们要找的是
阅读全文
摘要:感觉很水。 因为SAM上一个点的子树大小代表这个点所表示子串的出现次数。 建出广义后缀自动机之后。在$parent$树上跑$DP$,维护$size[i][1]$,和$size[i][0]$代表i的子树中有多少第一个串的结束节点和第二个串的结束节点,然后答案就是$size[i][0] size[i][
阅读全文
摘要:我们对 作文库 建出广义后缀自动机。考虑用$SAM$处理出来一个数组$mx[i]$,表示从作文的第$i$个位置向左最远在作文库中出现的子串的长度。这个东西可以在$SAM$上跑$trans$边来实现(其实求出来的是作文前i位在作文库中出现的最长后缀)。 处理出来这个东西,我们考虑用$DP$求答案。发现
阅读全文
摘要:首先要差分+离散化。 然后就是求形如ABA的串有多少,其中B的长度确定为k。 我们用到了设置关键点的思想。我们枚举A的长度L。然后在$1,1+L,1+L 2,1+L 3。。。$设置关键点。然后我们枚举这些关键点,试图求出跨过这个关键点的长度为L的在B左边的A有多少个。 可以证明这样可以做到不重不漏,
阅读全文
摘要:一个初步的想法是我们枚举重复子串的长度$L$。然后跑一遍SA。然后我们枚举一个点$i$,令他的对应点为$i+L$,然后求出这两个点的LCP和LCS的长度答案就是这个点的答案就是$(len(LCP)+len(LCS)+L 1)/L$。这个可以用跟$EXKMP$的类似的方法证明。 但是这样会T。 那么如
阅读全文
摘要:求出一个串使得这个串是$s1,s2$的子串。串中不包含$s3$。 如果没有这个$s3$就可以二分答案,然后height小于二分值分一组。看看每组里是不是出现过$s1,s2$的后缀。判断就行。 然后有了$s3$之后,我们考虑改变一下height数组。 我们把$s1s2$拼在一起构成一个新串$s$。(中
阅读全文
摘要:很容易想到只考虑后缀长度必须为$max(height[rk[i]],height[rk[i]+1])+1$(即$[i,i+x 1]$代表的串只出现过一次)然后我正着做一遍反着做一遍,再取一个$min$最后挂了。。。 设$x=max(height[rk[i]],height[rk[i]+1])+1$我
阅读全文
摘要:一开始的时候感觉就是一个主席树裸题。 然后发现自己错了。 首先建出后缀数组。 设$irk[j]$显然i更优。 如果$rk[i] include include include include include include include using namespace std; const int
阅读全文
摘要:喜闻乐见的LCT+SAM 此题要求动态插入,直接上后缀树。然后询问其实就是求一个节点的子树后缀结束节点的个数。 因为建立后缀树需要插入和删除,就直接上LCT。每次加入一个点,把它到根的路径加一 ~~(现在我才知道access之后那个splay就是这个点到根的路径,LCT学得不好)~~ 思路不需要说太
阅读全文
摘要:后缀自动机有一个性质。 就是如果倒建SAM两个串的lcp就是这两个串的结束节点的LCA。 然后就可以愉快的跑DP了。 对于每一个后缀树上的节点$u$,它对$len[u]$的贡献是$\sum_{v1}\sum_{v2\neq{v1}}size[v1] size[v2]$当然如果u就是一个后缀的结尾就要
阅读全文
摘要:我们把所有的名,姓,询问都拼起来构成一个新的长串,然后跑一边SA。排完序后对于每一个询问,我们可以二分求出它所对应的区间(即满足这个区间的前缀都是这个询问串)。然后问题就转化为很多区间问区间出现过的不同的数。这个东西可以用离线后吧询问按右端点从小到大排序+树状数组解决(HH的项链,采花)。 那么第二
阅读全文
摘要:~~1A真舒服。~~ 喜闻乐见的树链剖分+SA。 一个初步的想法就是用树链剖分,把两个字符串求出然后hash+二分求lcp。。。不存在的。 因为考虑到这个字符串是有序的,我们需要把每一条重链对应的字符串和这个重链反过来对应的字符串拼起来构成一个新的字符串。我们用树链剖分拼出两个字符串。用树剖拼出的这
阅读全文