poj 2406 Power Strings(KMPnext性质)
2012-03-19 00:16
573 查看
【题目大意】:给出一个字符串,将其分解为若干子串的和,求可分解的最多子串的个数。Sample Input
abcd aaaa ababab .Sample Output
1 4 3
【解题思路】:
利用next数组的性质:•如果len%(len-next[len-1])==0,则字符串中必存在最小循环节,且循环次数即为 len/(len-next[len-1]) 其中len为所给字符串的长度! 证明:•必要性:因为字符串中存在最小循环节(设长度为k),next[len-1]=len-k,所以len%(len-next[len-1])==0;• 充分性:令k1=len-next[len-1],由于k1整除len,所以可以相应的把len划分为n片区域(n=len/(k1)),从小到大依次表示为•t1,t2...tn;由next数组的定义可知,t1=t2,t2=t3,...t(n-1)=tn,且相应的片区域即为最小,所以循环次数也为len/(len-next[len-1]);[/code]
【代码】:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <cmath>#include <string>#include <cctype>#include <map>#include <iomanip>using namespace std;#define eps 1e-8#define pi acos(-1.0)#define inf 1<<30#define pb push_back#define lc(x) (x << 1)#define rc(x) (x << 1 | 1)#define lowbit(x) (x & (-x))#define ll long longchar s[1000010];int next[1000010],sn,temp;void solve_kmp_next(){next[0]=0;sn=strlen(s);for(int i = 1; i < sn; i++){temp=next[i-1];while(temp && s[temp]!=s[i])temp=next[temp-1];if(s[temp]==s[i])next[i]=temp+1;elsenext[i]=0;}return ;}int main(){while (~scanf("%s",s)){if (s[0]=='.') return 0;solve_kmp_next();if(sn%(sn-next[sn-1])==0)printf("%d\n",sn/(sn-next[sn-1]));elseprintf("1\n");}return 0;}[/code]
相关文章推荐
- POJ 2406 Power Strings 1961的简化版,kmp的next数组的应用
- POJ 2406 Power Strings (kmp next数组)
- Power Strings POJ 2406【KMP Next的应用】
- POJ 2406 Power Strings(KMP next[]函数)
- poj 2406 Power Strings (kmp 中 next 数组的应用||后缀数组)
- POJ2406 Power Strings(KMP next数组的运用)
- POJ 2406 Power Strings--字符串哈希(bkdhash)-KMP(next)
- POJ 2406-Power Strings(重复子串-KMP中的next数组)
- poj 2406 Power Strings(kmp next数组的应用)
- poj 2406 Power Strings KMP的next数组的应用
- POJ 2406 Power Strings (KMP next数组应用)
- poj 2406 Power Strings[kmp,next数组的应用]
- POJ 2406 Power Strings(kmp)
- POJ2406_Power Strings_KMP_求最短重复子序列
- POJ 2406 Power Strings next数组循环节应用、
- POJ - 2406 Power Strings(KMP 循环节)
- 【kmp+最小循环节】poj 2406 Power Strings
- POJ - 2406 Power Strings (KMP循环节)
- poj 2406 Power Strings (用kmp代替后缀数组求解)
- POJ2406 Power Strings 解题报告【字符串】【KMP】