关闭

HDU3746Cyclic Nacklace(KMP 求循环节)

标签: kmp
678人阅读 评论(0) 收藏 举报
分类:

Cyclic Nacklace

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10367    Accepted Submission(s): 4438


Problem Description
CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, without any surprise, there are only 99.9 yuan left. he is too distressed and thinking about how to tide over the last days. Being inspired by the entrepreneurial spirit of "HDU CakeMan", he wants to sell some little things to make money. Of course, this is not an easy task.

As Christmas is around the corner, Boys are busy in choosing christmas presents to send to their girlfriends. It is believed that chain bracelet is a good choice. However, Things are not always so simple, as is known to everyone, girl's fond of the colorful decoration to make bracelet appears vivid and lively, meanwhile they want to display their mature side as college students. after CC understands the girls demands, he intends to sell the chain bracelet called CharmBracelet. The CharmBracelet is made up with colorful pearls to show girls' lively, and the most important thing is that it must be connected by a cyclic chain which means the color of pearls are cyclic connected from the left to right. And the cyclic count must be more than one. If you connect the leftmost pearl and the rightmost pearl of such chain, you can make a CharmBracelet. Just like the pictrue below, this CharmBracelet's cycle is 9 and its cyclic count is 2:

Now CC has brought in some ordinary bracelet chains, he wants to buy minimum number of pearls to make CharmBracelets so that he can save more money. but when remaking the bracelet, he can only add color pearls to the left end and right end of the chain, that is to say, adding to the middle is forbidden.
CC is satisfied with his ideas and ask you for help.
 

Input
The first line of the input is a single integer T ( 0 < T <= 100 ) which means the number of test cases.
Each test case contains only one line describe the original ordinary chain to be remade. Each character in the string stands for one pearl and there are 26 kinds of pearls being described by 'a' ~'z' characters. The length of the string Len: ( 3 <= Len <= 100000 ).
 

Output
For each case, you are required to output the minimum count of pearls added to make a CharmBracelet.
 

Sample Input
3 aaa abca abcde
 

Sample Output
0 2 5
【题意】:给出一个字符串,问在末尾加上至少几个字母,就能变成循环的。(循环至少要两次)
【解析】:kmp自我匹配函数得出自我匹配表
【代码】:
#include <stdio.h>
#include<string.h>
const int MAX=1e6+5;
int T,n,m;
char a[MAX],b[110000];
int f[110000];
void getfail(char *p,int *f)
{
	int m=strlen(p);
	f[0]=f[1]=0;
	int j;
	for(int i=1;i<m;i++)
	{
		j=f[i];
		while(j&&p[i]!=p[j])j=f[j];
		if(p[i]==p[j])
			f[i+1]=j+1;
		else f[i+1]=0;
	}
}
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s",a);
		int m=strlen(a);
		getfail(a,f);
		int j=m-f[m];//j:循环节长度 
		if(m!=j&&m%j==0)puts("0");//恰好两次以上循环,一次不行。 
		else
		printf("%d\n",j-m%j);//最后一个循环节缺的数目 
	}
	return 0;
}


0
0
查看评论

hdu3746Cyclic Nacklace kmp补齐循环节

//给出一个字符串,问在其前或者其后最少需要添加几个 //字符才能使其为一个循环字符串 //kmp求出Next数组 //然后循环节的长度为n - Next[n] #include #include #include #include using namespace std ; const int m...
  • cq_pf
  • cq_pf
  • 2015-10-31 12:02
  • 114

数据结构:KMP next数组求串最小循环节、循环周期

KMP中next数组用于求最小循环节的应用 之前不知道next还有这个
  • u011639256
  • u011639256
  • 2014-08-14 16:10
  • 1294

kmp求最小循环节

KMP最小循环节、循环周期: 定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len],子串为S[0…len-next[len]-1]。 (1)如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len...
  • hao_zong_yin
  • hao_zong_yin
  • 2017-08-21 19:19
  • 220

kmp最小循环节的求法

其实我一直都没有理解严老师的数据结构中对于next函数求法中的一句话 next 函数求值可以看作是串的模式匹配问题,这句话我一直我不是很理解,我一直把它的过程理解为一个动态规划的过程(有兴趣的话可以参见上一篇文章),后来学长做的一个软件让我明白了 开始的时候,将t串的第一个字母的next值作为0...
  • u013060011
  • u013060011
  • 2014-02-11 21:32
  • 1631

Kmp找字符串循环节——Period ( POJ 1961 )

题目链接: http://poj.org/problem?id=1961 分析: 给出一个字符串长度为N,从左变开始取2~N个字符出来构成一个新字符串,若新字符串能被一个最短的循环节构成则输出新字符串的长度和循环节循环次数。 题解: 直接用Kmp里的SetNext()函数,求出该字符串里每一个...
  • FeBr2
  • FeBr2
  • 2016-07-15 15:09
  • 1089

hdu3746Cyclic Nacklace 扩展KMP

/* 题目描述:对于一个字符串s,如果将s的左右相连成一个圈后,这个圈是由相同的多个字符片段构成,那么这个串称为 “迷人串”,问在s的一端最少加上多少个字符,可以使s成为“迷人串”。 思路:借助扩展KMP中的next数组(代码中为f数组),len表示...
  • jijijix
  • jijijix
  • 2016-08-27 17:24
  • 209

Cyclic Nacklace(KMP求循环节)

Cyclic Nacklace Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S...
  • u014665013
  • u014665013
  • 2016-05-20 11:59
  • 395

KMP算法求字符串的最小循环节

题目链接(题目链接) 说到求字符串的最小循环节就不得不提及KMP算法 因为要求循环节,还需要用到KMP算法的next数组 KMP算法本来是用来求一个串中是否包含另一个串,或者说一个串是否为另一个串的子串 下面有一个视频,很清晰的介绍了KMP算法 KMP算法详解,看不懂算我输 如果K...
  • wjhshuai
  • wjhshuai
  • 2017-07-08 11:38
  • 399

Cyclic Nacklace +KMP求循环节

Cyclic Nacklace Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 16  ...
  • wenlovingliu
  • wenlovingliu
  • 2013-05-12 21:31
  • 443

Cyclic Nacklace (KMP 循环节)

http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。 例子: abcabc 已经循环2次,添加数为0 abcac 没有循环2次,添加字符abcac。数目为5. a #inc...
  • cowboy90
  • cowboy90
  • 2013-09-29 12:08
  • 287
    个人资料
    • 访问:102808次
    • 积分:3009
    • 等级:
    • 排名:第13799名
    • 原创:197篇
    • 转载:9篇
    • 译文:0篇
    • 评论:33条
    博客专栏
    最新评论