【POJ - 1961】Period(KMP,循环节问题)

题干:

For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the largest K > 1 (if there is one) such that the prefix of S with length i can be written as A K,that is A concatenated K times, for some string A. Of course, we also want to know the period K.

Input

The input consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S.The second line contains the string S. The input file ends with a line, having the 
number zero on it.

Output

For each test case, output "Test case #" and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the prefix sizes must be in increasing order. Print a blank line after each test case.

Sample Input

3
aaa
12
aabaabaabaab
0

Sample Output

Test case #1
2 2
3 3Test case #2
2 2
6 2
9 3
12 4

 

题目大意:

    给你一个字符串,求这个字符串到第i个字符为止的子字符串的循环节的次数,输出i和循环次数。

解题报告:

   运用next数组可以直接出结果、、

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e6 + 5;
char s[MAX];
int Next[MAX],len;
void getnext() {Next[0] = -1;int k = -1,j = 0;int len = strlen(s);while(j < len) {if(k == -1 || s[k] == s[j]) {k++,j++;Next[j] = k;} else k = Next[k];}
}
int main() {int n,iCase = 0;while(~scanf("%d",&n)) {if(n == 0) break;scanf("%s",s);getnext();printf("Test case #%d\n",++iCase);for(int i=2; i<=n; i++) {int tmplen=i-Next[i]; //循环节长度if(Next[i]>0 && i % tmplen == 0) printf("%d %d\n",i,i/tmplen);}printf("\n");}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux tomcat守护_linux下非root用户运行tomcat

# 前言&#xff1a;为什么要使用非root用户运行tomcatroot用户启动tomcat有一个严重的问题&#xff0c;那就是tomcat具有root权限。这意味着你的任何一个页面脚本(html/js)都具有root权限&#xff0c;所以可以轻易地用页面脚本 修改整个硬盘里的文件&#xff01;所以最好不要使…

【牛客 - 331E】炫酷划线(权值线段树,树状数组哈希,随机数)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/331/E 来源&#xff1a;牛客网 平面上有一个圆&#xff0c;圆环上按顺时针顺序分布着从1到n&#xff0c;一共n个点。 现在无聊的小希开始按某种顺序对其在圆内两两连线&#xff0c;小希尽量避免让两…

linux 判断网卡是否异常_如何判断linux网卡故障?

linux网卡的信息里错误和碰撞数值高是否说明网卡有问题还是网络有问题&#xff1f;如何判断网卡有没有问题&#xff1f;ifconfigeth0Linkencap:EthernetHWaddr52:51:AB:14:60:B8inetaddr:192.168.1.254Bcas...linux网卡的信息里错误和碰撞数值高是否说明网卡有问题还是网络有问…

autosar网络管理_AP AUTOSAR平台设计(11)——网络管理

点击蓝字右上角 关注置顶不迷路Hello&#xff01;大家好&#xff01;欢迎来到《搞一下汽车电子》本篇是AP AUTOSAR平台设计(11)——网络管理如果觉得不错&#xff0c;“转发” “ 在看”支持一下吧~1.网络管理算法概述AUTOSAR NM基于分散的网络管理策略&#xff0c;这意味…

【牛客 - 331D】炫酷路途(二进制枚举 或 建图方式+最短路 或 dfs)

题干&#xff1a; 小希现在要从寝室赶到机房&#xff0c;路途可以按距离分为N段&#xff0c;第i个和i1个是直接相连的&#xff0c;只需要一秒钟就可以相互到达。 炫酷的是&#xff0c;从第i个到第i2pi2p个也是直接相连的&#xff08;其中p为任意非负整数&#xff09;&#x…

mysql 子查询 as_mysql子查询

更多关于LeetCode习题总结请翻阅我的博客&#xff1a;LeetCode - mysql子查询【184. 部门工资最高的员工】子查询一、按查询结果分类&#xff1a;1.作为数据源使用&#xff1b;2.作为选择条件使用&#xff1b;二、按常见的子查询分类&#xff1a;1.由比较运算符引发的子查询&am…

【牛客 - 331G】炫酷数字(反素数打表 或 扩展埃式筛法,结论)

题干&#xff1a; 小希希望你构造一个最小的正整数&#xff0c;使得其有n个因子。 输入描述: 第一行一个整数T表示数据组数每组数据第一行输入一个正整数n&#xff0c;表示其因子数。n≤1,000,000n≤1,000,000T≤1,000,000T≤1,000,000输出描述: 输出一行一个整数&#xff…

【牛客 - 331J】炫酷数学(打表猜结论,按位枚举证明)

题干&#xff1a; 小希最近想知道一个东西&#xff0c;就是ABA|B(其中|为按位或)的二元组有多少个。 当然&#xff0c;直接做这个式子对小希来说太难了&#xff0c;所以小希改变了一些条件&#xff0c;她仅想知道其中A,B<NA,B<N的情况&#xff0c;其中N为2的幂次。 当然…

workerman mysql_workerman/mysql

Workerman/MySQL说明常驻内存的程序在使用mysql时经常会遇到mysql gone away的错误&#xff0c;这个是由于程序与mysql的连接长时间没有通讯&#xff0c;连接被mysql服务端踢掉导致。本数据库类可以解决这个问题&#xff0c;当发生mysql gone away错误时&#xff0c;会自动重试…

【LeetCode - 279】完全平方数(四平方和定理,数论,图论,dp)

题干&#xff1a; 给定正整数 n&#xff0c;找到若干个完全平方数&#xff08;比如 1, 4, 9, 16, ...&#xff09;使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 示例 2: 输入: n 13 输出: 2 解释: 13 …

C++中string类的length()与size()方法和C语言的strlen()函数有什么区别?

直接上代码段&#xff1a; char buf[256]{0}; buf[0]a; buf[2]v; buf[3]h;string strTest(buf,6); cout<<"strTest[0]:"<<(uint32_t)strTest[0]<<"_"<<(uint32_t)strTest[1]<<"_"<<(uint32_t)strTest[2]&l…

nutch mysql solr_Nutch2.1+mysql+solr3.6.1+中文网站抓取

1、mysql 数据库配置 linux mysql安装步骤省略。 创建数据库与表 [sql] view plaincopyprint? CREATE DATABASE nutch DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE TABLE webpage( id varchar (767) CHARACTER SET latin1 NOT N1、mysql 数据库配置l…

【计蒜客信息学模拟赛1月月赛 - D】Wish(dp计数,数位)

题干&#xff1a; 如果一个数大于等于 10且任意连续两位都是质数&#xff0c;那么就称之为 Wish 数。当然&#xff0c;第一个 Wish 数是 11。 比如 97&#xff0c;111&#xff0c;131&#xff0c;119 都是 Wish 数&#xff0c;而 12&#xff0c;136 则不是。 问第 N 个 Wish…

mysql8 授权远程登录_MySQL8 远程授权访问

在测试环境&#xff0c;想实现MySQL 8 数据库的远程访问授权。传统的方法已经不行&#xff0c;报1064错误GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 123456 WITH GRANT OPTION;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that co…

【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)

题干&#xff1a; 蒜头去嘉年华玩儿套圈圈&#xff0c;是这么玩儿的。有一些瓶口口径不同的啤酒瓶&#xff0c;瓶子里面有一些奖品。如果蒜头用手上的圈圈套中了啤酒瓶&#xff0c;那么奖品就归他了。 假设蒜头君无限精准&#xff0c;指哪儿打哪儿&#xff0c;并且蒜头了解到…

centos web 访问mysql_Centos7安装Web服务器--Mysql5.7.12安装

我是勤劳的搬运工……源码装了好多次Mysql&#xff0c;终于成功了……因为安装mysql需要对应的boost文件(必须是相应版本&#xff0c;不能高也不能低)&#xff0c;所以&#xff0c;为了不再麻烦的搜索对应的boost文件&#xff0c;下载包含boost的Mysql包2.查看是否有编译器# gc…

【计蒜客 - 蓝桥训练】轻重搭配(贪心,STLset 或 二分)

题干&#xff1a; n 个同学去动物园参观&#xff0c;原本每人都需要买一张门票&#xff0c;但售票处推出了一个优惠活动&#xff0c;一个体重为 xx 的人可以和体重至少为 2x2x 配对&#xff0c;这样两人只需买一张票。现在给出了 nn 个人的体重&#xff0c;请你计算他们最少需…

phpstudy mysql5.1_linux下mysql5.1 和 5.7安装教程详解

本文主要和大家分享linux下mysql 5.1 和 5.7的安装教程&#xff0c;希望能帮助到大家。以下内容的操作系统为&#xff1a;centos 6.7yum安装mysql 5.1.73卸载系统自带的mysql执行以下命令查看是否有自带mysql:rpm -qa | grep mysql如果发现有输出结果,那么执行以下命令依次删除…

【牛客 - 368C】流星雨(概率dp,乘法逆元)

题干&#xff1a; 现在一共有n天&#xff0c;第i天如果有流星雨的话&#xff0c;会有wiwi颗流星雨。 第i天有流星雨的概率是pipi。 如果第一天有流星雨了&#xff0c;那么第二天有流星雨的可能性是p2Pp2P&#xff0c;否则是p2p2。相应的&#xff0c;如果第i−1 (i≥2)i−1 (…

mysql workbench 无法编辑_MySQL Workbench编辑表数据是只读的

14 个答案:答案 0 :(得分&#xff1a;60)我假设桌子有一把主键。首先尝试运行unlock tables命令以查看是否修复了它。如果所有其他方法都失败了&#xff0c;您可以更改表以创建具有自动增量的新主键列&#xff0c;并希望能够修复它。一旦完成&#xff0c;您应该能够毫无问题地删…