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 三大框架之一Flask入门
Flask轻量级框架,Flask是python中的轻量级框架. 打开终端 输入pip install Flask 命令 下载以及安装Flask框架 检查是否下载成功及能否使用 首先导入python环境 ...
- WPF C# int.TryParse的用法
; if (!int.TryParse(item.Tag.ToString(), out comld)) { continue; } 没转换成功就continue 开始写成 if(GetNumber( ...
- 基于TCP(面向连接)的Socket编程
基于TCP(面向连接)的Socket编程 一.客户端: 1.打开一个套接字(Socket); 2.发起连接请求(connect); 3.如果连接成功,则进行数据交换(read.write.send.r ...
- 【转】Leveldb源码分析——1
先来看看Leveldb的基本框架,几大关键组件,如图1-1所示. Leveldb是一种基于operation log的文件系统,是Log-Structured-Merge Tree的典型实现.LSM源 ...
- 解决“错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
在Visual Studio 2017中调试VC++6.0代码,出现该问题,解决方案如下:(1)[项目]—>[属性]—>[C/C++]—> [常规]—>[调试信息格式]—> ...
- 网站被k
经常见到很多SEO人员的网站被搜索引擎K了,到处找所谓的SEO大神求助,最后还是无用功,作为优秀的SEO人员我们不能病急乱投医.接下来,我会着重讲解网站被K之后如何快速恢复的办法. 首先来说下网站被搜 ...
- 001_获取nginx证书
一. 以下命令可以获取nginx域名的证书 openssl s_client -showcerts -connect www.jyall.com:443 < /dev/null 2>&am ...
- python初始化环境记录
初始化python环境:yum install -y gcc libffi-devel python-devel openssl-devel gcc-c++yum install -y python- ...
- LabVIEW-PC-PLC-MCU串口通信-介绍很全
链接:https://pan.baidu.com/s/1dG9nuPN 密码:vnpf
- 【原创】大数据基础之Hadoop(2)hdfs和yarn最简绿色部署
环境:3结点集群 192.168.0.1192.168.0.2192.168.0.3 1 配置root用户服务期间免密登录 参考:https://www.cnblogs.com/barneywill/ ...