D - 娜娜梦游仙境系列——村民的怪癖
D - 娜娜梦游仙境系列——村民的怪癖
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 - 娜娜梦游仙境系列——村民的怪癖的更多相关文章
- E - 娜娜梦游仙境系列——莫名其妙的插曲
E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 1 ...
- B - 娜娜梦游仙境系列——跳远女王
B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- G - 娜娜梦游仙境系列——梦醒
G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- F - 娜娜梦游仙境系列——多民族王国
F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- C - 娜娜梦游仙境系列——吃不完的糖果
C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Oth ...
- A - 娜娜梦游仙境系列——诡异的钢琴
A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)
题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只 ...
- Cogs 1695. 梦游仙境(分块)
梦游仙境 ★☆ 输入文件:XTTMYXJ.in 输出文件:XTTMYXJ.out 简单对比 时间限制:5 s 内存限制:512 MB [题目描述] 在Asm.def仍然在与人工智能进行艰苦的斗争时,雪 ...
- acdream 1683 村民的怪癖(KMP,经典变形)
Problem Description 娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近.忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之 ...
随机推荐
- (一)初步了解python
python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. Py ...
- javascript variables 变量
一,调试方法: 1.document.write(); 直接在网页中显示. 2.alert(); 弹窗显示. 3.console. ...
- 《Intel汇编第5版》 Mov指令
一.Mov用于数据传送,用法如下: 二.当传送的数据和目标数据位宽不一致的时候,需要使用MOVZX.MOVSX扩展.MOVZX使用0填充高位,MOVSX使用源操作数最高位填充 下面是汇编代码演示: I ...
- C# 语言规范_版本5.0 (第18章 不安全代码)
1. 不安全代码 **(注:此章对于跨多语言编程开发非常重要,如遇异常无法完成跨语言,建议使用此种方式.) 如前面几章所定义,核心 C# 语言没有将指针列入它所支持的数据类型,从而与 C 和 C++ ...
- Ecstore安装篇-2.单机部署【linux】
单机部署实施-linux 单机部署实施-linux author :James,jimingsong@vip.qq.com since :2015-03-02 系统环境需求 软件来源 底层依赖 1. ...
- Knockout js 绑定 radio 时,当绑定整形的时候,绑定不生效
解决方案: 使用checkedValue和checked 组合,如下代码. <div><input type="radio" name="flavorG ...
- 第一个Android crackme(2016-05)
第一个Android crackme 0x00 背景 最近在学习Android的逆向,把基本的环境搭好后,看了看<第一行代码--Android>,然后就按照非虫大牛的<Android ...
- jfinal获取服务器的IP和端口
String serverIp = getRequest().getServerName(); Integer serverPort = getRequest().getServerPort();
- CentOS安装glibc-2.14,错误安装libc.so.6丢失急救办法
CentOS安装glibc-2.14,错误安装libc.so.6丢失急救办法 到http://ftp.gnu.org/gnu/glibc/下载glibc-2.14.tar.xz tar glibc ...
- 解决WordPress邮件无法发送问题
1 安装插件 Wp Mail Bank 2 开启第三方SMTP服务 以163为例:设置 - POP3/SMTP/IMAP 开启,会要求设置授权码 3 配置插件:Wp Mail Bank - sett ...