随笔分类 - all—好题
摘要:这个输出可是有点恶心啊……WA\ inf,最后抄了别人的输出方法orz 还有注意会爆long long,要开unsigned long long 对于k==1,单独考虑每一位i,如果这一位为1则有0.5的概率贡献1 include include using namespace std; const
阅读全文
摘要:建回文自动机,注意到一个回文串是可以通过一个长度小于等于这个串长度的一半的回文串添上一些字符然后复制得到的,也就是在自动机上向fa走,相当于treedp 每次都走显然会T,记录一个up,指向祖先中最下长度符合要求的回文后缀,这样每次找最多跳一次,所以是O(n)的,还有child的清空动态的做,也就是
阅读全文
摘要:manacher魔改,hash+二分都好写,但是我魔改了个回文自动机就写自闭了orz 根本上来说只要把==改成!=即可,但是这样一来很多停止条件就没了,需要很多特判手动刹车,最后统计一下size即可 cpp include include include using namespace std; c
阅读全文
摘要:建个SAM,符合要求的串显然是|right|==1的节点多代表的串,设si[i]为right集合大小,p[i]为right最大的r点,这些都可以建出SAM后再parent树上求得 然后对弈si[i]==1的点,考虑它所代表的串是s(p[i] dis[i]+1,p[i])~s(p[i] dis[fa[
阅读全文
摘要:首先只有lcp(i,j)需要考虑 因为SAM的parent树是后缀的前缀的最长公共后缀(……),所以把这个串倒过来建SAM,这样就变成了求两个前缀的最长公共后缀,长度就是这两个前缀在parent树上的lcs对应的最大长度dis 这里用treedp解决即可,就是合并一下size cpp include
阅读全文
摘要:AC自动机比较简单,把询问串做成AC自动机然后模板串边跑变更新即可 SAM是把模板串做成广义SAM,然后每个节点存有几个模板串经过,具体方法是每次更新暴力向上跳直到有时间戳~~我不会证为什么时间复杂度是对的~~,沿途更新个数,查询的时候直接匹配到最后的点然后输出个数即可 cpp include in
阅读全文
摘要:把模板串建一个广义SAM 然后在线查询,每次在SAM上预处理出一个a[i]表示i位置向前最多能匹配多长的模板串 二分答案L,dp判断,设f[i]为·~i有几个匹配,转移显然是f[i]=max{f[i 1],f[j]+i j(i a[i]=L\ 0.9
阅读全文
摘要:有一个显然的性质就是每个串一定在某个叶子为根的树中是一条直的链 然后因为SAM里是不会有相同状态的,所以以每个叶子为根dfs一遍,并且动态构造SAM(这里的节点u的last指向父亲),最后统计答案就是dis[i] dis[fa[i]]的和 我看别的题解都说和trie有关……然而并没用用到(也可能是用
阅读全文
摘要:把两个串中间加一个未出现字符接起来,然后求SA 然后把贡献统计分为两部分,在排序后的后缀里,属于串2的后缀和排在他前面属于串1的后缀的贡献和属于串1的后缀和排在他前面属于串2的后缀的贡献 两部分分别作,都用单调栈维护一段里的height最小值(因为lcp是排序后两后缀中间height最小值),然后根
阅读全文
摘要:差分,然后二分长度mid,判断是把height按照min不小于mid分组,取最大最小的sa位置看是否 =mid即可,注意差分后最后答案要+1
阅读全文
摘要:ねえ、あいをさけぶのなら
あたしはここにいるよ
阅读全文
摘要:顾不得山又高,
这水又深,
山高水深,
路途遥远,
我忍饥挨饿来寻将军。
阅读全文
摘要:果てしなく 道は続いて見えるけれど
この両手は 光を抱ける
阅读全文
摘要:全てを明日に任せて踊ろうぜもっと
阅读全文
摘要:纵身入尘埃里
雷雨大作我也放声而歌
阅读全文