题目链接:http://poj.org/problem?id=2406

题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) 。

题目分析:设字符串长度为 \(m\) ,如果 \(m-1-nxt[m-1]\) 能够整除 \(m\) ,则 \(K=m/(m-1-nxt[m-1])\) ,否则 \(K=1\) 。

实现代码如下:

#include <cstdio>
#include <string>
using namespace std;
const int maxn = 1001000; int m, nxt[maxn];
string t;
char ch[maxn]; string read() {
scanf("%s", ch);
string tmp_s = ch;
return tmp_s;
} void cal_next() {
m = t.length();
for (int i = 0, j = -1; i < m; i ++) {
while (j != -1 && t[j+1] != t[i]) j = nxt[j];
nxt[i] = (j+1 < i && t[j+1] == t[i]) ? ++j : -1;
}
} int main() {
while (true) {
t = read();
if (t == ".") break;
cal_next();
int K = 1;
if (m % (m-1-nxt[m-1]) == 0) {
K = m / (m-1-nxt[m-1]);
}
printf("%d\n", K);
}
return 0;
}

作者:zifeiy

最新文章

  1. jQuery-DataTables相关的网址
  2. Canvas绘制渐变
  3. css3选择器总结
  4. 访客至上的Web、移动可用性设计--指导原则
  5. java中常用的工具类(一)
  6. session的一个问题
  7. [转]Unity3d之MonoBehaviour的可重写函数整理
  8. Highcharts axja 获取json对象动态生成报表生成
  9. 不能用100%ie6不兼容
  10. Hadoop学习—最大的敌人是自己
  11. Android开发之打开闪光灯录制视频
  12. 可持久化Trie树
  13. 红帽linux忘记root密码的配置
  14. php获取文件名
  15. eclipse myeclipse修改工作区间 an error has occurred. see error log for more details. java.lang.nullpointerexception 问题解决
  16. 基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合
  17. SQL Server 查询性能优化——创建索引原则(二)
  18. koa 中间件
  19. Junit集成测试
  20. 对C#中几个循环语句的使用,请教

热门文章

  1. expect.js
  2. JavaScript--jquery.min.js文件
  3. iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料
  4. C++ 之手写strcpy
  5. 会话技术之cookie(记录当前时间、浏览记录的记录和清除)
  6. Leetcode695.Max Area of Island岛屿的最大面积
  7. 洛谷 P1119 灾后重建 最短路+Floyd算法
  8. More Effective C++: 05技术(25-28)
  9. 写一个nginx监控日志
  10. time,datetime模块