![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
后缀数组
后缀数组
米兰的小耳朵
Don't settle. Keep moving.
展开
-
后缀数组板子
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <vector> #define inf 0x3f3f3f3f #define ms(x) memset(x, 0, sizeof(x)) #define ll long long using原创 2017-11-30 17:27:50 · 154 阅读 · 0 评论 -
Repeats SPOJ - REPEATS 重复次数最多的连续重复子串
算法分析: 先穷举长度L,然后求长度为L的子串最多能连续出现几次。首先连续出现1次是肯定可以的,所以这里只考虑至少2次的情况。假设在原字符串中连续出现2次,记这个子字符串为S,那么S肯定包括了字符r[0],r[L],r[L*2],r[L*3],……中的某相邻的两个。所以只须看字符r[L*i]和r[L*(i+1)]往前和往后各能匹配到多远,记这个总长度为K,那么这里连续出现了K/L+1次。最后看最大原创 2017-11-30 21:47:30 · 278 阅读 · 0 评论 -
POJ 1743 Musical Theme & SPOJ PHRASES Relevant Phrases of Annihilation
POJ 1743 求不可重叠最长重复子串二分答案, 判断是否存在两个长度为k的子串相同, 且不重叠,利用height[ ], 把排序后的后缀分块。将每组height[i]>k的分在同一组中。 Ma 与 Mi 是每组后缀中的符合条件的最大的起点和最小的起点。 如果两个的差值>枚举的答案k, 则这组后缀符合条件。bool check(int n, int k){ int Ma = sa[i]原创 2017-12-02 08:38:12 · 141 阅读 · 0 评论