KMP poj 2406 Power Strings 字符串的幂
来源:互联网 发布:javascript正则表达式= 编辑:程序博客网 时间:2024/05/17 04:11
题意:
给定两个字符串a和b,定义式子:a*b表示两个字符串的连接,例如:a = "abc", b = "def" 则:a*b = "abcdef"。如果将连乘看成乘法,则按照普遍的方法一个非负整数的幂表示如下: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).
输入:
输入字符串S每组样例一行,S为可打印字符.S长度在1~1000000之间,最后一组数据后为“.”表示结束。
输出:
每个S输出最大的n满足:S = a^n,其中a为任意字符串。
分析:
题目大意:给出一个字符串,求出他的最小重复单元是什么,进而再求出重复次数,例如:“aaaa”最小重复单元是“a”重复次数是4;
解题思路:设字符串S = “abcabc”求其next数组:
S: a b c a b c
next[j]: -1 0 0 0 1 2 3
在这里为了计算要多算出一位,那么可能成为最小重复单元的长度可由下面的规则确定:
(1)若2*next[len] < len 则最小重复单元长度为len那么他重复次数为1
(2)若2*next[len] > len 则:
1>:如果len%(len-next[len]) == 0则最小重复单元长度为len - next[len],那么其重复次数为len/(len-next[len]).
2>:如果len%(len - next[len]) != 0 则最小重复单元长度为:len,那么其重复次数为1
好好揣摩以上两点!
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 1000010;int next[MAXN];void Get_next(char* str){ int i = 0, j = -1; next[0] = -1; int len = strlen(str); while(i < len) { if(j == -1 || str[i] == str[j]) { ++i; ++j; next[i] = j; } else j = next[j]; }}int main(){ char str[MAXN]; while(~scanf("%s", str)) { if(str[0] == '.') break; Get_next(str); int len = strlen(str); if(2*next[len] < len) cout<<"1"<<endl; else { if(len % (len - next[len]) == 0) cout<<len/(len-next[len])<<endl; else cout<<"1"<<endl; } } return 0;}
- KMP poj 2406 Power Strings 字符串的幂
- poj 2406 Power Strings-字符串(kmp)
- POJ 2406 Power Strings (KMP找字符串的循环节)
- POJ 2406 Power Strings(KMP的应用)
- Power Strings poj 2406 kmp的运用
- poj 2406 Power Strings 【KMP的应用】
- poj 2406 Power Strings---kmp
- POJ 2406 Power Strings KMP
- poj-2406-Power Strings-kmp
- POJ-2406 Power Strings KMP
- Power Strings - POJ 2406 KMP
- poj 2406 Power Strings kmp
- POJ 2406-Power Strings (KMP)
- 【KMP】 POJ 2406 Power Strings
- poj 2406 Power Strings KMP
- POJ 2406 Power Strings KMP
- poj 2406 Power Strings KMP
- poj 2406 Power Strings (KMP)
- ssh 关闭后仍保持当前运行的进程
- 程序员大牛 Jeff Atwood 的两本中文书
- 【Unity3D】【NGUI】屏幕自适应
- jquery 点击切换面板及图标
- 一致性hash
- KMP poj 2406 Power Strings 字符串的幂
- rxt客户端集成oa系统
- 二级指针实现单链表的插入、删除及 linux内核源码双向链表之奇技
- 组合数 C语言练习
- Oracle with子句的简单介绍.
- OSX: PlistBuddy不好使了
- UI Overview//用户界面概述
- 【C++程序设计】补6.2 排序算法
- 58同城CEO姚劲波:58成功上市的四大关键因素