2011年9月2日
摘要: poj2406题目大意:给出一个字符串,求出是某个字符串的n次方解决:KMP找出字符串的循环节若有字符串ai...a(j+m),若next[len+1]=m(字符串从1开始),意味着从ai ...am 和 aj...a(j+m)相等,假设中间有相交部分(或者相交部分为0)aj....am,若总长度减去相交部分剩余的部分能被总长度整除,又因为从ai ...am 和 aj...aj+m相等,所以除去相交部分剩余的的两段字符串相等,而且必定满足中间相交部分也能被起始字符串整除,依照这样,即可得出最小的循环节#include <iostream>#include <cstdio> 阅读全文
posted @ 2011-09-02 14:54 猿类的进化史 阅读(509) 评论(0) 推荐(0) 编辑
摘要: hdoj2087题目大意:解决:kmp,与poj3461神似,只需做小小的改动即可#include <iostream>#include <cstring>#include <cstdio>using namespace std;char s[1005],t[1005];int next[1005],lens,lent;void getnext(){ int i=1,j=0; next[1]=0; while(i<=lent) { if(j==0 || t[i]==t[j]) { i++; ... 阅读全文
posted @ 2011-09-02 11:44 猿类的进化史 阅读(320) 评论(0) 推荐(0) 编辑
摘要: poj 2752题目大意:前边的串和后边的串相同的字符的个数解决:kmp的next值,代表前边有多少和从开头的字符串相同#include <iostream>#include <cstdio>#include <cstring>using namespace std;char str[400005];int next[400005];int res[400005];int main(){ while(scanf("%s",str+1)!=EOF) { int i=1,j=0,k=0; next[1]=0; int len=strlen(s 阅读全文
posted @ 2011-09-02 07:38 猿类的进化史 阅读(280) 评论(0) 推荐(0) 编辑