D. Common Divisors CF 182D
2012-04-25 11:29
239 查看
/* KMP s[k....j]==s[m....i](两个字符串完全相等) char s[10005]; int next[10005]; int get_next(int len) { int i=0,j=-1; next[0]=-1; for(i=1;i<len;i++) { while(j>=0 && s[j+1]!=s[i])//j>=0 j=next[j]; if(s[j+1]==s[i]) j++; next[i]=j; } return next[len-1]; } */ #include<stdio.h> #include<string.h> int get_next(int len,char s[],int next[]) { int i=0,j=-1; next[0]=-1; for(i=1;i<len;i++) { while(j>=0 && s[j+1]!=s[i]) j=next[j]; if(s[j+1]==s[i]) j++; next[i]=j; } return len-next[len-1]-1; } char s[100005]; char t[100005]; int len_s,len_t; int next1[100005],next2[100005]; int gcd(int a,int b) { return !b?a:gcd(b,a%b); } int main() { int i,j; int flag; int c1,c2; while(scanf("%s%s",s,t)!=EOF) { len_s=strlen(s); len_t=strlen(t); c1=get_next(len_s,s,next1); c2=get_next(len_t,t,next2); int ans=0; flag=0; if(c1==c2) { for(i=0;i<c1;i++) if(s[i]!=t[i]) break; if(i<c1)flag=1; if(len_s%c1!=0 ||len_t%c1!=0) flag=1; if(!flag) { int g1=len_s/c1 ,g2=len_t/c2; for(i=1;i<=g1 && i<=g2;i++) if(g1%i==0 && g2%i==0) ans++; } printf("%d\n",ans); } else { if(len_s%len_t==0) { for(i=0;i<len_s;i++) if(s[i]!=t[i%len_t]) break; if(i>=len_s) ans++; } else if(len_t%len_s==0) { for(i=0;i<len_t;i++) if(t[i]!=s[i%len_s]) break; if(i>=len_t) ans++; } printf("%d\n",ans); } } return 0; }
相关文章推荐
- D. Common Divisors CF 182D
- CodeForces Round #117 (182D) - Common Divisors
- CodeForces 182D(#117)|Common Divisors|KMP求循环节
- codeforces 182D Common Divisors KMP做法
- Codeforces 182D - Common Divisors
- Kmp(求字符串公共循环节数目)——Common Divisors ( CodeForces 182D )
- Codeforces 182D - Common Divisors
- 4427. Greatest Common Divisors
- Codility-CommonPrimeDivisors
- CF-27E - Number With The Given Amount Of Divisors(枚举+dfs)
- CF 111B Petya and Divisors【想法题+二分(可省略)】
- CF-27E - Number With The Given Amount Of Divisors(枚举+dfs)
- Codeforces-182D:Common Divisors(KMP)
- CF 342A(Xenia and Divisors-考虑有限情况)
- Codeforces182D - Common Divisors(KMP)
- CF A. Xenia and Divisors
- Codeforces Round #117 (Div. 2) D.Common Divisors(KMP最小循环节)
- 4427. Greatest Common Divisors
- CF Number With The Given Amount Of Divisors
- Sicily 4427. Greatest Common Divisors