2011年5月19日

poj 1961

摘要: 题意:给出一个串,问你这个串的所有前缀,最多是由多少个相同的子串重复连接而成的。代码:#include<iostream>#include<fstream>using namespace std;char c[1000005];int next[1000004];int len;void get(){ int i,j,k; j=0;k=-1;next[0]=-1; while(j<len) if(k==-1||c[j]==c[k]) next[++j]=++k; else k=next[k];}void read(){// ifstream cin("i 阅读全文

posted @ 2011-05-19 17:07 宇宙吾心 阅读(363) 评论(0) 推荐(0)

poj 2406

摘要: 题意:给出一个串,问你这个最多是多少个相同的字串重复连接而成的。如:ababab则最多有3个ab连接而成。代码:#include<iostream>#include<fstream>using namespace std;char c[1000005];int next[1000004];int len;void get(){ int i,j,k; j=0;k=-1;next[0]=-1; while(j<len) if(k==-1||c[j]==c[k]) next[++j]=++k; else k=next[k];}void read(){// ifstrea 阅读全文

posted @ 2011-05-19 16:57 宇宙吾心 阅读(529) 评论(0) 推荐(0)

poj 2752

摘要: 题意:给你一个串,如果这个串存在一个长度为n的前缀串,和长度为n的后缀串,并且这两个串相等,则输出他们的长度n。求出所有的长度n。代码:#include<iostream>#include<fstream>using namespace std;char c[400003];int next[400004];int len;void getnext(){ int i,j,k; j=0;k=-1; next[0]=-1; while(j<len) { if(k==-1||c[j]==c[k]) next[++j]=++k; else k=next[k]; }}voi 阅读全文

posted @ 2011-05-19 16:39 宇宙吾心 阅读(312) 评论(0) 推荐(0)

poj 3461

摘要: 题意:给你一个子串(模式串)和一个母串(文本),问子串在母串中出现的次数。代码:#include<iostream>#include<fstream>using namespace std;char s[10012];char t[1000012];int next[10011];void getnext(){ int i,j,k; j=0;k=-1;next[0]=-1; int len=strlen(s); while(j<len) if(k==-1||s[k]==s[j]) next[++j]=++k; else k=next[k];}void kmp(){ 阅读全文

posted @ 2011-05-19 16:23 宇宙吾心 阅读(419) 评论(0) 推荐(0)

poj 3450

摘要: 题意:给你n个的串,求出它们的最长公共子串,如果不存在这个子串,则输出“IDENTITYLOST”,如果存在多个最长公共子串,则输出字典序最小的那一个。代码:#include<iostream>#include<fstream>using namespace std;char c[4001][202];int len[4001];int next[210];char str[210];int n;void getnext(char c[]){ int i,j,k; int len=strlen(c); j=0;k=-1;next[0]=-1; while(j<le 阅读全文

posted @ 2011-05-19 16:04 宇宙吾心 阅读(442) 评论(0) 推荐(0)

导航