2013年8月11日

hdu 2459 (后缀数组+RMQ)

摘要: 题意:让你求一个串中连续重复次数最多的串(不重叠),如果重复的次数一样多的话就输出字典序小的那一串。分析:有一道比这个简单一些的题spoj 687,假设一个长度为l的子串重复出现两次,那么它必然会包含s[0]、s[l]、s[l*2]...之中的相邻的两个。不难看出,该重复子串必然会包含s[0..l]或s[l..l*2]或s[l*2..l*3]...。所以,我们可以枚举一个i,对于每个i*l的位置,利用后缀数组可以求出s[i*l..(i+1)*l]向后延伸的长度k。k/l+1即i*l..(i+1)*l这一段重复出现的次数。但还有一种情况。考虑以下的字符串:aababababab假设现在l=2,i 阅读全文

posted @ 2013-08-11 18:06 后端bug开发工程师 阅读(1149) 评论(0) 推荐(0)

hdu 3948(后缀数组+RMQ)

摘要: 题意:求一个串中有多少不同的回文串。分析:这一题的关键是如何去重,我表示我现在还没理解为什么这样去重,先放这里过两天再看!!//不同回文子串数目#include #include #include #include using namespace std;#define N 200010int ws1[N],wv[N],wa[N],wb[N];int rank1[N],height[N],sa[N];char str[N];int a[N],n;int dp[N][25],vis[N];int mmin(int a,int b){ return a>b?b:a;}int cmp(int 阅读全文

posted @ 2013-08-11 08:55 后端bug开发工程师 阅读(621) 评论(0) 推荐(0)

导航