2013年9月20日

Codeforces126B - Password(KMP)

摘要: 题目大意给定一个字符串S,要求你找到一个最长的子串,它既是S的前缀,也是S的后缀,并且在S的内部也出现过(非端点)题解KMP的失配函数f[i]的非零值就是前i个字符的一个最长前缀且也是后缀的字符串的末尾位置,倒过来求每一个f[i],并且判断是否在S的内部是否出现即可代码:#include #include #include #include using namespace std;#define MAXN 1000005char T[MAXN],s[MAXN];int f[MAXN];void getfail(char *p,int len){ int j; f[0]=j=-1; ... 阅读全文

posted @ 2013-09-20 22:33 仗剑奔走天涯 阅读(252) 评论(0) 推荐(0) 编辑

Codeforces182D - Common Divisors(KMP)

摘要: 题目大意 如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S1和S2,求它们的公共因子个数 题解 如果它们有公共因子,那么显然它们的最小公共因子肯定是相等的~~~,公因子就是字符串的最短循环节~~~所以我们先把两个最短循环节给求出来,并判断是否相同,如果相同的话就是它们的最小公因子,然后所有的最小公因子的倍数并且是S1和S2的公约数都是它们的公因子... 阅读全文

posted @ 2013-09-20 22:01 仗剑奔走天涯 阅读(575) 评论(0) 推荐(0) 编辑

Codeforces149E - Martian Strings(KMP)

摘要: 题目大意 给定一个字符串T,接下来有n个字符串,对于每个字符串S,判断是否存在T[a…b]+T[c…d]=S(1 ≤ a ≤ b #include #include #include using namespace std;#define MAXN 1005char p[MAXN],T[MAXN*100];int f[MAXN],pos[MAXN],ans;void getfail(){ i... 阅读全文

posted @ 2013-09-20 21:41 仗剑奔走天涯 阅读(598) 评论(0) 推荐(0) 编辑

导航