题目链接 一开始还想用o(n)贪心……想多了…… 后缀数组预处理之后通过比较rank来确定取前面的或者后面的 调了半天发现c[]开小了QAQ 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstri
分类:
其他好文 时间:
2016-02-28 12:23:01
阅读次数:
238
先求后缀数组、相邻两个后缀的最长公共前缀 二分答案,o(n)check 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<s
分类:
其他好文 时间:
2016-02-28 09:47:58
阅读次数:
252
给n个字符串,求最长的多于n/2个字符串的公共子串。 依然是二分判定+height分组。 把这n个字符串连接,中间用不同字符隔开,跑后缀数组计算出height; 二分要求的子串长度,判断是否满足:height分组,统计一个组不同的字符串个数是否大于n/2; 最后输出方案,根据二分得出的子串长度的结果
分类:
编程语言 时间:
2016-02-27 19:24:07
阅读次数:
221
求两个字符串的最长公共子串。 拼接两个字符串中间用特殊字符隔开,max(height[i])(2<=i<=len,suffix(sa[i])与suffix(sa[i-1])分别属于两个字符串的后缀)就是答案! 1 #include<cstdio> 2 #include<cstring> 3 #inc
分类:
编程语言 时间:
2016-02-22 22:04:16
阅读次数:
274
"本人是蒟蒻,各位看官见笑了。" 复习一下AC自动机,感觉AC自动机还总是写不好…后缀数组和KMP的题目还没有写过。Trie树的题目只写了裸题,把POJ上那道异或的题目做掉才算理解了字典树的精髓… 网络流基本上只写过裸题,写费用流,然后学习最小割,最大密度子图,有上下界的网络流…二分图真的不会,学匈
分类:
其他好文 时间:
2016-02-22 00:18:36
阅读次数:
202
求一个串的最大回文字串。 可以用后缀数组解决。 分别考虑奇数和偶数回文子串的情况,枚举原串S的每个位置i作为中间位置看其能向左右两边同时拓展都哪儿:把原串S反转成S',拼接SaS'(a为一个特殊字符),最远拓展的地方便可以通过LCP(suffix[i],suffix[i'])求得,i'为i对应在S‘
分类:
编程语言 时间:
2016-02-21 11:34:39
阅读次数:
276
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1359 Solved: 618[Submit][Status][Discuss] Description a180285幸运地被选做了地球到喵星球的留学生。
分类:
编程语言 时间:
2016-02-20 13:21:27
阅读次数:
464
题目求最长的重复k次可重叠子串。 与POJ1743同理。 二分枚举ans判定是否成立 height分组,如果大于等于ans的组里的个数大于等于k-1,这个ans就可行 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 usi
分类:
编程语言 时间:
2016-02-19 15:53:29
阅读次数:
193
1 const int maxn=50010; 2 int r[maxn],Wa[maxn],Wb[maxn],Wv[maxn],Ws[maxn],rank[maxn],lcp[maxn],sa[maxn]; 3 4 bool cmp(int *p,int i,int j,int l) 5 {ret
分类:
编程语言 时间:
2016-02-18 23:00:29
阅读次数:
181
全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分+RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries + BIT 就行了.时间复杂度O(N log N). 速度垫底了QAQ 你们都会SAM。。。。--
分类:
编程语言 时间:
2016-02-14 00:25:20
阅读次数:
350