POJ2406 Power Strings 题解 KMP算法
2024-09-25 10:20:19
题目链接: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
最新文章
- jQuery-DataTables相关的网址
- Canvas绘制渐变
- css3选择器总结
- 访客至上的Web、移动可用性设计--指导原则
- java中常用的工具类(一)
- session的一个问题
- [转]Unity3d之MonoBehaviour的可重写函数整理
- Highcharts axja 获取json对象动态生成报表生成
- 不能用100%ie6不兼容
- Hadoop学习—最大的敌人是自己
- Android开发之打开闪光灯录制视频
- 可持久化Trie树
- 红帽linux忘记root密码的配置
- php获取文件名
- eclipse myeclipse修改工作区间 an error has occurred. see error log for more details. java.lang.nullpointerexception 问题解决
- 基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合
- SQL Server 查询性能优化——创建索引原则(二)
- koa 中间件
- Junit集成测试
- 对C#中几个循环语句的使用,请教
热门文章
- expect.js
- JavaScript--jquery.min.js文件
- iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料
- C++ 之手写strcpy
- 会话技术之cookie(记录当前时间、浏览记录的记录和清除)
- Leetcode695.Max Area of Island岛屿的最大面积
- 洛谷 P1119 灾后重建 最短路+Floyd算法
- More Effective C++: 05技术(25-28)
- 写一个nginx监控日志
- time,datetime模块