POJ 1961 Period (KMP)
来源:互联网 发布:2016年海南旅游数据 编辑:程序博客网 时间:2024/06/05 11:05
题目链接:http://poj.org/problem?id=1961
构建KMP算法中的Next数组,发现最小循环节长度存在当且仅当i % (i - Next[i]) == 0
内存:
8332kB
时间:
177ms
语言:
G++
代码如下:
#include <iostream>#include <string>const int MAXN = 1000010;using std::cout;using std::cin;using std::endl;using std::string;int next[MAXN];int * buildNext(char * p){ int m = strlen(p); int i, j; int * next = new int [m]; i = next[0] = -1; j = 0; while(j < m - 1) { if(0 > i || p[j] == p[i]){ ++j, ++i; next[j] = (p[i] != p[j] ? i : next[i]);//改进的kmp,即真前缀和真后缀要在下一位上不同。 } else i = next[i]; } return next;}int main(){ std::ios::sync_with_stdio(false); cin.tie(0); int len, cases = 0; string str; while(cin >> len && len) { cin >> str; ++cases; buildNext(str, len); cout << "Test case #" << cases << endl; for(int i = 1; i < len; ++i) { if(next[i] && !((i + 1) % (i + 1 - next[i]))) cout << i + 1 << " " << (i + 1) / (i + 1 - next[i]) << endl; } cout << "\n"; } return 0;}
阅读全文
1 0
- poj 1961:Period (KMP)
- poj 1961 Period (KMP)
- poj 1961 Period---kmp
- POJ 1961-Period:KMP
- poj 1961 Period KMP
- poj 1961 Period(KMP)
- Period - POJ 1961 KMP
- POJ 1961 Period (KMP)
- POJ Period 1961【KMP】
- POJ 1961 Period kmp
- poj 1961 Period 【KMP】
- POJ-1961(Period)(kmp())
- [poj 1961]Period[kmp]
- POJ 1961 Period (KMP)
- POJ 1961 Period(KMP)
- |poj 1961|KMP|Period
- Poj-1961-Period-【KMP】
- POJ 1961 Period (KMP)
- Hbase 调优
- Hdu-3746-Cyclic Nacklace-【KMP】
- zcmu-1959
- Andoird 仿某理财APP自定义尺子控件
- 8-16 希望沿着这条路一直走下去
- POJ 1961 Period (KMP)
- Android 点击拉伸文字和图片的效果
- 如何用消息系统避免分布式事务
- Dukemann International
- $.each(){} 和<c:forEach>的用法
- Java内部类的使用小结
- sparkR介绍及安装
- Count the string HDU
- PHP运行时强制显示出错信息的代码