D - 娜娜梦游仙境系列——村民的怪癖

Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)
Submit Status

Problem Description

娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之。复前行,欲穷其林。林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田美池桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。(摘自《桃花源记》)

娜娜与村民交流了好久才发现这里的人们给孩子的命名方式很奇怪,首先村民们的名字都是用专门的符号来记录,正好是26个符号,于是娜娜就把它们替换成‘a’~‘z’,然后首先把爸爸的名字作为孩子的姓,妈妈的名字作为孩子的名。这时候肯定有人会问,不是独生子女怎么办?很简单~取拼接好的名字的前缀与后缀相同的部分从短到长依次作为孩子的姓名,啥,不够?那就不许你再生孩子!

不过由于桃花村民与世隔绝太久了,以致于他们总是无法正确判断一对夫妻最多能生多少个孩子,于是就把这个任务交给你了。

P.S. 若用S[1,n]表示一个长度为n的字符串,那么S[1,i](1<=i<=n)表示S的一个前缀,S[j,n](1<=j<=n)表示S的一个后缀。具体看样例解释

Input

多组数据,首先是一个正整数t(t<=20),表示数据的组数

对于每一组数据,包含两个只由'a'~'z'组成的不含空格的字符串S1,S2,分别代表丈夫的姓名以及妻子的姓名。(1<=|S1|,|S2|<=100000)

Output

对于每组数据,输出一个整数,表示这对夫妻最多可以生育多少个孩子。

Sample Input

2
ababc ababa
aaaaa aaa

Sample Output

3
8

Hint

对于样例1,把丈夫和妻子的姓名拼接在一起是ababcababa,可以作为孩子的姓名的是a、aba、ababcababa,故最多生育3个孩子

对于样例2,把丈夫和妻子的姓名拼接在一起是aaaaaaaa,可以作为孩子的姓名的是a、aa、aaa、aaaa、aaaaa、aaaaaa、aaaaaaa、aaaaaaaa,故最多生育8个孩子

题解:这一题目在于求,对于新组成的字符串,有多少个相同的以str[0]为起点的前缀和以str[N-1]为终点的后缀,方法在于对Next数组的应用,因为next数组里面存的数是next[i]是表示以str[0]为起点的前缀和以str[i-1]为终点后缀,相同前后缀的最大长度。依照题意,只需要从next[N]=K开始查找下一个next[k],从最大长度的相同前后缀开始查找,找到Next[j]==-1,(查找到第一个字符)直到查找需要多少次查找才能够跳转到第一个字符,输出这个次数就是所要求的答案、

 #include <iostream>
#include <stdio.h>
#include<string.h>
using namespace std;
char STR[];
char STR_S[];
void getNext(char p[],int next[],int Len_t) /*next数组, */
{
int i=,j=-;
next[]=-; /*起点赋值为-1*/
while(i<Len_t)
{
if(j==-||p[i]==p[j])next[++i]=++j;
else j=next[j];
}
}
int main()
{
int next[];
int T,i,Len,sum,j,sign;
char str;
scanf("%d",&T);getchar();
while(T--)
{
for(i=;;i++)
{
str=getchar();
if(str==)i--;
else if(str=='\n'){STR[i]='\0';Len=i;break;}
else STR[i]=str;
}
sum=;
j=Len;
getNext(STR,next,Len); /*对合成的串求next数组*/
while(next[j]!=-)
{
j=next[j]; /*详细请看next[i]数组的原理,*next[i]里面存的到该i位置相同前后缀的最大长度,*/
sum++; /*以此递归找next中的数,判断需要几次才会跳到起点,来找出会有多少个相同的前后缀*/
}
printf("%d\n",sum);
}
return ;
}

D - 娜娜梦游仙境系列——村民的怪癖的更多相关文章

  1. E - 娜娜梦游仙境系列——莫名其妙的插曲

    E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 1 ...

  2. B - 娜娜梦游仙境系列——跳远女王

    B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Other ...

  3. G - 娜娜梦游仙境系列——梦醒

    G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  4. F - 娜娜梦游仙境系列——多民族王国

    F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  5. C - 娜娜梦游仙境系列——吃不完的糖果

    C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Oth ...

  6. A - 娜娜梦游仙境系列——诡异的钢琴

    A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  7. acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)

    题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只 ...

  8. Cogs 1695. 梦游仙境(分块)

    梦游仙境 ★☆ 输入文件:XTTMYXJ.in 输出文件:XTTMYXJ.out 简单对比 时间限制:5 s 内存限制:512 MB [题目描述] 在Asm.def仍然在与人工智能进行艰苦的斗争时,雪 ...

  9. acdream 1683 村民的怪癖(KMP,经典变形)

    Problem Description 娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近.忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之 ...

随机推荐

  1. MyBatis 学习-与 Spring 集成篇

    根据官方的说法,在 ibatis3,也就是 Mybatis3 问世之前,Spring3 的开发工作就已经完成了,所以 Spring3 中还是没有对 Mybatis3 的支持.因此由 Mybatis 社 ...

  2. jdk之String

    学习几个常用的String方法 1.concat /** * Concatenates the specified string to the end of this string. 连接指定的字符串 ...

  3. select与ajax结合

    要实现的功能是,点击select输入框,数据库里面的数据会以option弹出. 这需要用到ajax异步连接数据库 下面贴出代码 先说明一下后台传递的数据是json,以map的形式传入的.后台代码很简单 ...

  4. Java 内部类 this

    内部类访问外部类的一个例子: public class Abc { private class Bc { public void print() { System.out.println(Abc.th ...

  5. MySQL数据库的数据备份和恢复(导入和导出)命令操作语法【转】

    不管是Oracle数据库还是SQL Server数据库,每个数据库都有自己的一套数据备份和恢复的方法,MySQL数据库也不例外.MySQL数据库备份和恢复用到了两个命令,分别是“mysqldump”和 ...

  6. 二.创建maven工程及下载需要的jar包

    1.使用Eclipse的Maven插件来创建一简单的Maven项目 步骤:打开新建项目对话框,选择Maven Project(File->New->Object->Maven-> ...

  7. Digi. Certificates: Key pairs usages

    In short, we have some sort of algorithms to gen pair of private and public keys. The public key is ...

  8. linux开发

    linux开发资料 01 02 03 04 05 06 07 08 09 10 11 1 2 3 4 5 21 22 23 24 25

  9. 批量安装XP补丁的命令

    方法一: 新建一个bat文件,把这个文件和所有补丁文件放在同一个目录下,双击运行. BAT代码如下 @echo offfor %%i in (*.exe) do %%i /passive /nores ...

  10. LoadRunner参数值定义-摘自一米阳光

    深入解析LoadRunner下的参数化取值   熟悉LoadRunner的人,相信都会经常使用参数化功能,但是对于参数化的使用到底了解多少,就值得深思了.包括本人在内也是,每次在做压力测试的时候,基本 ...