https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/F

【题意】

给定一个字符串,问在字符串后最少添加多少个字母,得到的新字符串能是前缀循环的字符串。

【思路】

这道题的关键是要理解KMP中的nxt数组什么含义。

nxt[i]就是以i结尾的字符串中前缀和后缀匹配的最长长度。

所以len-nxt[len]就是最小循环节。

如abcdab,nxt[len]就是2,最小循环节就是4(abcd)。

理解了这个这道题就迎刃而解了。

【网上解释】

http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html

【Accepted】

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int n;
const int maxn=1e5+;
const int inf=0x3f3f3f3f;
char str[maxn];
int nxt[maxn];
typedef long long ll;
void kmp_pre(int m)
{
int i,j;
j=nxt[]=-;
i=;
while(i<m)
{
while(i<m)
{
while(j!=-&&str[i]!=str[j])
{
j=nxt[j];
}
nxt[++i]=++j;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(nxt,,sizeof(nxt));
scanf("%s",str);
int len=strlen(str);
kmp_pre(len);
//cout<<nxt[len]<<endl;
int ans=len-nxt[len];
if(ans!=len&&len%ans==)
{
printf("0\n");
}
else
{
printf("%d\n",ans-(len-(len/ans)*ans));
}
}
return ;
}

【KMP+最小循环节】F. Cyclic Nacklace的更多相关文章

  1. HDU3746 Cyclic Nacklace —— KMP 最小循环节

    题目链接:https://vjudge.net/problem/HDU-3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. hdu 3746 Cyclic Nacklace(kmp最小循环节)

    Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...

  3. Cyclic Nacklace hdu3746 kmp 最小循环节

    题意:给出一段字符串  求最少在最右边补上多少个字符使得形成循环串(单个字符不是循环串) 自己乱搞居然搞出来了... 想法是:  如果nex[len]为0  那么答案显然是补len 否则  答案为循环 ...

  4. Common Divisors CodeForces - 182D || kmp最小循环节

    Common Divisors CodeForces - 182D 思路:用kmp求next数组的方法求出两个字符串的最小循环节长度(http://blog.csdn.net/acraz/articl ...

  5. UVAlive 3026 KMP 最小循环节

    KMP算法: 一:next数组:next[i]就是前面长度为i的字符串前缀和后缀相等的最大长度,也即索引为i的字符失配时的前缀函数. 二:KMP模板 /* pku3461(Oulipo), hdu17 ...

  6. Codeforces Round #117 (Div. 2) D.Common Divisors(KMP最小循环节)

    http://codeforces.com/problemset/problem/182/D 题意:如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S ...

  7. HDU1358 Period —— KMP 最小循环节

    题目链接:https://vjudge.net/problem/HDU-1358 Period Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  8. HDU - 4333 Revolving Digits(拓展kmp+最小循环节)

    1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> ...

  9. [poj 2185] Milking Grid 解题报告(KMP+最小循环节)

    题目链接:http://poj.org/problem?id=2185 题目: Description Every morning when they are milked, the Farmer J ...

随机推荐

  1. 题解报告:hdu 1098 Ignatius's puzzle

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题目中文是这样的: 伊格内修斯在数学上很差,他遇到了一个难题,所以他别无选择,只能上诉埃迪. 这 ...

  2. 员工管理系统(集合与IO流的结合使用 beta1.0 ArrayList<Employee>)

    package cn.employee; public class Employee { private int empNo; private String name; private String ...

  3. D. Dasha and Very Difficult Problem 二分

    http://codeforces.com/contest/761/problem/D c[i] = b[i] - a[i],而且b[]和a[]都属于[L, R] 现在给出a[i]原数组和c[i]的相 ...

  4. PHP serialize() 序列化函数

    PHP serialize() 序列化函数 定义和用法 — 语法 string serialize ( mixed $value ) serialize() 返回字符串,此字符串包含了表示 value ...

  5. Microsoft SQL Server学习(二)

    目录 关于数据库的语法: 1.创建数据库 create database 数据库名 on primary (主文件属性(name,filename,size等)) -用逗号隔开次要主要文件和次要文件 ...

  6. 【PostgreSQL-9.6.3】表空间

    在PostgreSQL中,表空间实际上是为表指定一个存储目录,这样方便我们把不同的表放在不同的存储介质或者文件系统中.在创建数据库.表.索引时都可以指定表空间. 1. 创建表空间 --表空间目录必须是 ...

  7. Node.js——优先从缓存加载

    main中执行require操作,目的是获取接口对象,所以多次引用b,并不会重复执行模块内部的输入输出,因为缓存中已经存在

  8. MySQL for Mac 终端操作说明

    mysql for mac 终端操作说明MySQL服务开启Mac版mysql可以从设置里启动服务: 如果想要在终端(Terminal)中操作mysql,需要先添加mysql路径,在此以zsh为例: # ...

  9. arcpy利用XY创建点

    # -*- coding: utf-8 -*-"""Created on Sun Apr 7 15:32:24 2019@author: ""&quo ...

  10. React和webpack解决 waiting for roots to load...to reload the inspector

    使用chrome调试工具,react-devtools总是显示 "waiting for roots to load...to reload the inspector" and ...