G: Dave的时空迷阵(next数组)
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数组)的更多相关文章
- 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 ...
- 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 ...
- KMP 求最小循环节
转载自:https://www.cnblogs.com/chenxiwenruo/p/3546457.html KMP模板,最小循环节 下面是有关学习KMP的参考网站 http://blog.cs ...
- 正则表达式之g标志,match和 exec
1.g标志 g标志一般是与match和exec来连用,否则g标志没有太大的意义. 先来看一个带g标志的例子: var str = "tankZHang (231144) tank yi ...
- js去除数组重复项
/** * js去除数组重复项 */ //方法一.使用正则法 // reg.test(str),匹配得到就返回true,匹配不到返回false var arr = ["345",& ...
- JavaScript面向对象程序设计:数组
或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为……其间的种种关系吧……嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样子的. 1. 创建数组 在J ...
- js中字符串和数组相互转化的方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p. ...
- jquery ajax post 传递数组 ,多checkbox 取值
jquery ajax post 传递数组 ,多checkbox 取值 http://w8700569.iteye.com/blog/1954396 使用$.each(function(){});可以 ...
- js数组的操作及数组与字符串的相互转化
数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...
随机推荐
- python,os方法的简单介绍
''' 这一个章节是学习os及os.path的用法 ''' #学习os首先需要引入os文件,imoprt os import os #getcwd()的用法,它是返回当前的工作目录,说白了就是你的程序 ...
- 如何在vue中使用动态使用本地图片路径
不知道各位小伙伴有没有在开发遇到一个问题,就是在线上的项目使用后台返回本地图片路径,然后加载不上的情况呢? 我的解决方法就是:先在项目的data下定义好这样一个数组用于存放需要加载的路径 [ {nam ...
- Spring Bean自动检测
1-自动检测bean 需要用到<context:component-scan> 注意:a) 需要include进来xmlns:context命名空间:base-package指的是我们要扫 ...
- 【转】python f-string
[转]python f-string 文章目录 1. 主要内容 1.1. 旧时代的格式化字符串 1.1.1. Option #1: %-formatting 1.1.2. 怎样使用 %-forma ...
- Shell-匹配FTP文件名
想弄个脚本,下载每日构建的版本,由于版本文件名中有构建时间(不是固定值),只能按日期确认文件名,例如:project_name_2019-01-04*.exe 搜索了下,可以用dir filename ...
- Shell-删除误解压的文件
我意外在/var/www/html/,而不是/home/projects/www/current下解压了一个tarball.它搞乱了/var/www/html下的文件,你甚至不知道哪些是误解压出来的. ...
- 【转】浅析SkipList跳跃表原理及代码实现
SkipList在Leveldb以及lucence中都广为使用,是比较高效的数据结构.由于它的代码以及原理实现的简单性,更为人们所接受.首先看看SkipList的定义,为什么叫跳跃表? "S ...
- less/sass 基础base文件
less less-base.less文件展示: //清除标签默认样式; .label(){ ;;;_background-image:url(n1othing.txt)} ;;; font-size ...
- zabbix3.2监控vcenter和exsi信息
简介 为了解 ESXI虚拟主机的运行状况,通过zabbix进行监控,图形展示ESXI虚拟主机当前的状态,避免因为esxi服务器因为资源利用率过高导致 概述 从 Zabbix 2.2.0 开始支持对 V ...
- nginx https配置记录
一.证书生成: 要有两个文件,一个私钥,一个证书. 私钥:-----BEGIN PRIVATE KEY----- 开始 证书:-----BEGIN CERTIFICATE----- 开始 二.Ngin ...