HDU 3374 String Problem(字符串最小表示+KMP )
2013-04-17 22:51
363 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374
题意:求字符串的最小最大表示位置以及循环节个数。
思路:循环节是KMP的。
题意:求字符串的最小最大表示位置以及循环节个数。
思路:循环节是KMP的。
char s ; int next ,len; void getNext(char s[],int len,int next[]) { next[0]=-1; int i=0,j=-1; while(i<len) { if(j==-1||s[i]==s[j]) next[++i]=++j; else j=next[j]; } } //flag=1,返回最小表示位置 //flag=0,返回最大表示位置 int cal(char *s,int len,int flag) { int i=0,j=1,k=0,t; while(i<len&&j<len&&k<len) { t=s[(j+k)%len]-s[(i+k)%len]; if(t==0) k++; else { if(flag) t>0?j+=k+1:i+=k+1; else t>0?i+=k+1:j+=k+1; if(i==j) j++; k=0; } } return min(i,j); } int main() { while(gets(s)) { len=strlen(s); getNext(s,len,next); int cnt,x=len-next[len]; if(len%x==0) cnt=len/x; else cnt=1; int Min=cal(s,len,1); int Max=cal(s,len,0); printf("%d %d %d %d\n",Min+1,cnt,Max+1,cnt); } return 0; }
相关文章推荐
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- hdu 3374 String Problem(KMP+字符串最小最大表示)
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
- hdu 3374 String Problem(最小表示法+kmp)
- HDU 3374 String Problem(最大最小表示法模板+KMP+next数组的运用)
- HDU 3374 String Problem (KMP+最大最小表示)
- hdu 3374 String Problem 【kmp+最小(大)表示法】
- hdu 3374 String Problem (最小表示法+KMP)
- HDU 3374 String Problem (KMP+最小最大表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem(KMP求周期+求串最大最小表示法)
- String Problem - HDU 3374 (kmp+最大最小表示)
- HDU 3374 KMP +字符串最小表示
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem(最小表示法·KMP)
- HDU 3374 String Problem(最小(大)表示 + KMP)
- HDU 3374 String Problem (KMP+最大最小表示法)
- hdu 3374 String Problem (kmp+最大最小表示法)