
字符串
文章平均质量分 76
mtxxxx
qq 1149169650
邮箱:huangxin0124@tongji.edu.cn
展开
-
紫书 p59 习题3-8
循环的地方就是余数重复出现的地方,这个不难想。用数组记录余数是否出现过。。出现一次就加1,这种方法以前见过的。。,就是电话号码那道题,但是一开始还是只想到记录下来每次的余数然后用循环来找这个余数有没有出现过,看了别人思路的提示才知道。。用数组这种思路不是很难想,以前也用这种方法做过,只是第一次是担心数组开太大才没用==恩。。以后注意就是这道题之后才知道为什么分数一定是有理数。。。。以前都没想过原创 2016-03-01 21:53:34 · 399 阅读 · 0 评论 -
manacher算法求最长回文子串(hdu3068)
//第一次学到这种算法,算法分析和代码实现参考了博客: http://blog.youkuaiyun.com/xingyeyongheng/article/details/9310555 很详细#include #include #include using namespace std;const int maxn=110005;char str[maxn],s[maxn*2];int p[max原创 2016-08-28 20:46:43 · 366 阅读 · 0 评论 -
后缀数组(三)求给定字符串不相同的子串个数(hdu 4622 区间询问)
如果字符串是给定的,不询问区间,按照论文里写的,由于每个子串一定是某个后缀的前缀,相当于就是求后缀之间不相同前缀的个数。每次新加进来一个后缀,就是加上(n-sa[i]+1)个新前缀,但是其中有height[i]个前面已经算过了,减掉即可。这题询问的是一个区间[l,r],一开始的思路是,对于每一个sa[i]在l到r之间的后缀,按前面那种方法计算,同时注意考虑一下lcp的右边超过了r的情况,过了样原创 2016-08-28 16:24:12 · 1572 阅读 · 0 评论 -
后缀数组(二)利用height对sa数组分组的做法(poj 1743 & poj 3261 )
poj 1743 给定一个字符串,求最长重复子串,且这两个子串不重叠二分答案,判断答案k是否可行时,把后缀数组分成若干组,每组中重复子串的长度都大于或等于k(即height大于等于k),如果本组中sa的最大最小值之差大于k就满足不重复,即这个k可行#include #include #include #include using namespace std;const int m原创 2016-08-28 08:02:33 · 713 阅读 · 0 评论 -
KMP(一)(简单题)
/************************************KMP最初的代码(写next可能会CE)1.getnext()递推 规定next[0]=-1; 当nextn[j]=k时: 若p[k]==p[j],可以看出next[j+1]=k+1 否则k=next[k]2.KMP() 当比较到s[i]!=p[j]时,j=nextn[j], 省去了原串的回溯,原创 2016-07-27 13:13:10 · 291 阅读 · 0 评论 -
字典树(一)
1.通过一道简单的题比较了一下指针和数组的写法...两种做法都是参考网上的..数组的写法好像更简洁,耗时间短一点,这里相当于是以后的模板了题目链接:http://acm.hust.edu.cn/vjudge/contest/123402#problem/A//指针写法,140ms#include #include #include using namespace std;con原创 2016-07-28 00:03:48 · 272 阅读 · 0 评论 -
字符创匹配(Rabin-Karp 算法)(hash)
//题目链接:http://poj.org/problem?id=3690//复杂度:如果一一检查,会退化为O(mn) 不同字符串哈希值冲突的概率非常低,//通常可以忽视,实际不做朴素的检查,所以是O(m+n)。//哈希函数:H(C)=(c1*pow(b,m-1)+c2*pow(b,m-2)+c3*pow(b,m-3)+...+cm*pow(b,0))mod h.(b为哈希的基数)//原创 2016-07-26 20:30:51 · 360 阅读 · 0 评论 -
紫书 p58 3-7
#include #include #include using namespace std;int main(){ int T,i,j,m,n,b[1001][4],max,r[1001],r2; char a[51][1001]; scanf("%d",&T); while(T--) { memset(b,0,sizeof(b原创 2016-03-01 09:24:39 · 351 阅读 · 0 评论 -
紫书 p48 例题 回文词
#include #include #include #include using namespace std;const char* a="A 3 HIL JM O 2TUVWXY51SE Z 8 ";const char* b[]={" -- is not a palindrome."," -- is a regular palindrome."," -- is a原创 2016-02-27 19:45:38 · 387 阅读 · 0 评论 -
紫书 p41例题: 竖式问题
#include #include int main(){ char s[20],buf[99]; int k=1; scanf("%s",s); for(int abc=111;abc<=999;abc++) for(int de=11;de<=99;de++) { int z=abc*de,y=abc原创 2016-02-26 20:01:33 · 422 阅读 · 0 评论 -
后缀数组(一)(模板题poj2774)
#include #include #include using namespace std;const int maxn=200010;char ss[maxn];int sa[maxn],t[maxn],t2[maxn],c[maxn],n,s[maxn];int Rank[maxn],height[maxn];void get_sa(int m){ int i,*x原创 2016-08-27 08:10:53 · 668 阅读 · 0 评论