G: Dave的时空迷阵

Time Limit: 1 s      Memory Limit: 128 MB

Submit My Status

Problem Description

皇家理工本部隐藏着一座扭曲时空的迷阵,一旦陷入迷阵就不能复出。Dave作为一个勇敢的探险家,勇敢闯入迷阵,并发现了一些规律……

Dave发现总是在行进一定距离后回到起点,继续走上重复的路途….

冷静分析之后,Dave在前进的路途中记录了标记(a-z的小写字母),并得到了一个字符串,Dave想知道,从起点开始,最少走多远会回到初始状态?

Input

第一行一个正整数nn为Dave记录的字符串长度(1≤n≤2×105)(1≤n≤2×105)

第二行为长度nn的字符串,仅包含a−za−z的小写英文字母的非空字符串

Output

第一行输出从起点再到起点的距离

第二行输出行进路上遇到的字符

Sample Input

4

abcd

Sample Output

4

abcd

分析:利用next数组找出循环段长度然后输出循环段即可;

#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
int n,ans,next1[2222222];
char p[222222];
void getnext()
{
int j=-1,i=0;
next1[0]=-1;
int lenth=strlen(p);
while(i<lenth)
{
if(j==-1||p[i]==p[j])
next1[++i]=++j;
else
j=next1[j];
}
ans=next1[i];//最后一串的最长相同前后缀长度
return ;
}
/*void getnext()
{
int len=0,i=1;
next1[0]=0;
int lenth=strlen(p);
while(i<lenth)
{
if(p[i]==p[len])
{
len++;
next1[i]=len;
i++;
}
else
{
if(len>0)
len=next1[len-1];
else
next1[i++]=len;
}
}
ans=next1[i-1];//最后一串的最长相同前后缀长度
return ;
}*/
int main()
{
scanf("%d",&n);
scanf("%s",p);
ans=0;
int lenth=strlen(p);
getnext();
printf("%d\n",lenth-ans);//循环段长度
for(int i=0;i<lenth-ans;i++)
printf("%c",p[i]);
printf("\n");
return 0;
}

G: Dave的时空迷阵(next数组)的更多相关文章

  1. Educational Codeforces Round 40 G. Castle Defense (二分+滑动数组+greedy)

    G. Castle Defense time limit per test 1.5 seconds memory limit per test 256 megabytes input standard ...

  2. G - KiKi's K-Number(树状数组求区间第k大)

    For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. No ...

  3. KMP 求最小循环节

    转载自:https://www.cnblogs.com/chenxiwenruo/p/3546457.html KMP模板,最小循环节   下面是有关学习KMP的参考网站 http://blog.cs ...

  4. 正则表达式之g标志,match和 exec

    1.g标志    g标志一般是与match和exec来连用,否则g标志没有太大的意义. 先来看一个带g标志的例子: var str = "tankZHang (231144) tank yi ...

  5. js去除数组重复项

    /** * js去除数组重复项 */ //方法一.使用正则法 // reg.test(str),匹配得到就返回true,匹配不到返回false var arr = ["345",& ...

  6. JavaScript面向对象程序设计:数组

    或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为……其间的种种关系吧……嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样子的.   1. 创建数组   在J ...

  7. js中字符串和数组相互转化的方法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p. ...

  8. jquery ajax post 传递数组 ,多checkbox 取值

    jquery ajax post 传递数组 ,多checkbox 取值 http://w8700569.iteye.com/blog/1954396 使用$.each(function(){});可以 ...

  9. js数组的操作及数组与字符串的相互转化

    数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...

随机推荐

  1. python,os方法的简单介绍

    ''' 这一个章节是学习os及os.path的用法 ''' #学习os首先需要引入os文件,imoprt os import os #getcwd()的用法,它是返回当前的工作目录,说白了就是你的程序 ...

  2. 如何在vue中使用动态使用本地图片路径

    不知道各位小伙伴有没有在开发遇到一个问题,就是在线上的项目使用后台返回本地图片路径,然后加载不上的情况呢? 我的解决方法就是:先在项目的data下定义好这样一个数组用于存放需要加载的路径 [ {nam ...

  3. Spring Bean自动检测

    1-自动检测bean 需要用到<context:component-scan> 注意:a) 需要include进来xmlns:context命名空间:base-package指的是我们要扫 ...

  4. 【转】python f-string

    [转]python f-string   文章目录 1. 主要内容 1.1. 旧时代的格式化字符串 1.1.1. Option #1: %-formatting 1.1.2. 怎样使用 %-forma ...

  5. Shell-匹配FTP文件名

    想弄个脚本,下载每日构建的版本,由于版本文件名中有构建时间(不是固定值),只能按日期确认文件名,例如:project_name_2019-01-04*.exe 搜索了下,可以用dir filename ...

  6. Shell-删除误解压的文件

    我意外在/var/www/html/,而不是/home/projects/www/current下解压了一个tarball.它搞乱了/var/www/html下的文件,你甚至不知道哪些是误解压出来的. ...

  7. 【转】浅析SkipList跳跃表原理及代码实现

    SkipList在Leveldb以及lucence中都广为使用,是比较高效的数据结构.由于它的代码以及原理实现的简单性,更为人们所接受.首先看看SkipList的定义,为什么叫跳跃表? "S ...

  8. less/sass 基础base文件

    less less-base.less文件展示: //清除标签默认样式; .label(){ ;;;_background-image:url(n1othing.txt)} ;;; font-size ...

  9. zabbix3.2监控vcenter和exsi信息

    简介 为了解 ESXI虚拟主机的运行状况,通过zabbix进行监控,图形展示ESXI虚拟主机当前的状态,避免因为esxi服务器因为资源利用率过高导致 概述 从 Zabbix 2.2.0 开始支持对 V ...

  10. nginx https配置记录

    一.证书生成: 要有两个文件,一个私钥,一个证书. 私钥:-----BEGIN PRIVATE KEY----- 开始 证书:-----BEGIN CERTIFICATE----- 开始 二.Ngin ...