摘要:
听说这是动态开点主席树的板子题,但是发现我还不会,于是就来写一写 其实跟主席树一个样子的 这里就是存个板子吧 cpp include include include include define re register define max(a,b) ((a) (b)?(a):(b)) define 阅读全文
摘要:
非常玄妙的博弈入门 好神仙的题啊 其实这就是经典的$Nim$问题 如果所有石子的异或和为$0$,那么这就是一个必败状态 这个我只会感性理解一下 首先所有的石子都是$0$,异或和肯定是$0$,这也自然是一个必败状态 而如果异或和不是$0$,我们设异或和为$X$ 我们可以找到这个$X$的最高位,显然那些 阅读全文
摘要:
求$\sum_{i=1}^ngcd(i,n)$ 考虑枚举$gcd$,现在答案变成这样 $\sum_{d|n}d f(d)$ $f(d)=\sum_{i=1}^n [gcd(i,n)==d]$ 考虑一下$f(d)$如何求 显然$f(d)=\varphi(n/d)$ 因为所有与$n/d$互质的数乘上$d 阅读全文
摘要:
这是$sa$的经典题目了 我们都知道答案就是 $$\sum_{i=1}^nn+1 sa[i] het[i]$$ 我们尝试理解一下这个东西 首先$n+1 sa[i]$表示的是排名为$i$的这个后缀能形成的子串个数是多少个,也就是从$sa[i]$位置开始的子串 之后减掉$het[i]$表示减掉的是和排名 阅读全文
摘要:
$Ac$自动机好题了 这个题要求我们一直无法匹配到结束标记,所以我们直接在$trie$图上找到一个环,这个环可以被根节点到达,之后还没有结束标记 发现自己不会$dfs$找环,于是直接莽上$tarjan$ 之后一直写挂各种$sb$ 代码 cpp include include include incl 阅读全文
摘要:
怎么全是广义后缀自动机,我$AC$自动机不服 这道题可以使用的算法很多,$SA$或者$SAM$应该都可以 但是我都不会 但是这毕竟是一个多串匹配问题,$AC$自动机还是可以刚一刚的 我们先考虑一下暴力做法 先将操作离线下来,之后对于所有的询问串建立$AC$自动机,之后我们把$n$个给出串放到$AC$ 阅读全文
摘要:
其实这道题跟 "[AHOI2013]差异" 很像 其实这个问题的本质就是让你算所有后缀的$lcp$长度之和,但是得来自两个不同的字符串 先把两个字符串拼起来做一遍$SA$,由于我们多算了来自于同一个串内的情况 于是在分别对这两个串建$SA$,减掉这两次算出来的答案 现在的问题转化为求出$height 阅读全文
摘要:
好像是最小表示法的板子题呢 但是不会啊,于是就变成了我的第一道$SAM$ 对于这种跟循环同构有关系的题,显然需要将原来的串倍长,之后先插入到$SAM$里去 之后我们在$SAM$上找到贪心访问最小的儿子找到一条长度为$n$的路径就好了 显然因为我们循环同构了,所以从根到根的任何一个转移必然会存在一个长 阅读全文
摘要:
$AC$机上的计数$dp$啊 并没有想到反着求出不合法的串的个数,直接正面硬上 设$dp[i][j][0/1]$表示匹配出的长度为$i$,在$AC$机上位置为$j$,没有/有匹配到一个完整串的方案数 由于这个的长度是满足子结构的,可以直接$dp$求解 注意结束标记会影响到所有能通过跳$fail$到达 阅读全文
摘要:
从原来的单串匹配变成了多串匹配 好像也没什么特别不一样的地方 原来的做法是搞一个栈,之后一旦匹配到就往前弹栈 做法也一样 但是在$AC$自动机上暴力跳$fail$是要$T$的 我们并没有必要去暴力跳$fail$,只需要存下往后跳$fail$能跳到的成功的位置是哪里就好了 这个在预处理的时候处理一下就 阅读全文