HDU 1358 Period (kmp求周期)
来源:互联网 发布:网络视频下载器 编辑:程序博客网 时间:2024/06/12 01:00
题意:
求出所有的前缀的周期循环次数大于1的,输出长度,循环次数
分析:
还是周期=i−nxt[i],然后搞就好了
代码:
//// Created by TaoSama on 2015-10-28// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 1e6 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;int n, nxt[N];char s[N];void getNxt() { nxt[0] = -1; int i = 0, j = -1; while(i < n) { if(j == -1 || s[i] == s[j]) nxt[++i] = ++j; else j = nxt[j]; }}int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); int kase = 0; while(scanf("%d", &n) == 1 && n) { scanf("%s", s); getNxt(); printf("Test case #%d\n", ++kase); for(int i = 2; i <= n; ++i) { int cycle = i - nxt[i]; int ans = i % cycle ? 0 : i / cycle > 1 ? i / cycle : 0; if(ans) printf("%d %d\n", i, ans); } puts(""); } return 0;}
0 0
- HDU 1358 Period (kmp求周期)
- HDU 1358 Period(KMP求周期)
- [HDU 1358]Period[kmp求周期]
- HDU 1358 Period 求周期串(kmp)
- hdu-1358 period(求周期串)
- poj 1961 Period(KMP求周期)
- HDU 1358Period(KMP周期串)
- HDU 1358 Period (kmp求循环节)
- hdu 1358 period 求循环节 KMP
- HDU-1358 Period(KMP求循环节)
- hdu 1358 Period(KMP)
- hdu 1358 Period(KMP)
- HDU 1358 Period(KMP)
- HDU 1358 Period(kmp)
- HDU - 1358 - Period (KMP)
- HDU 1358 Period (KMP)
- hdu 1358 Period(KMP)
- 【hdu 1358】Period(kmp)
- 非root权限安装软件
- codevs1080线段树练习(线段树)
- 用Python写的hilbert曲线生成代码
- JAVA快捷键使用
- 树状数组。。
- HDU 1358 Period (kmp求周期)
- iOS、Mac代码规范
- 将Unity3D项目导出到Android工程中二次开发并实现之间的数据交互
- muleESB简介和安装(一)
- 一道题(5)
- Java基础(11):枚举类型
- stm32 mdk c++(error: #29: expected an expression)
- 【课本】学生信息管理
- ios 自动布局