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のsqlalchemy简单查询
#!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...
- python,中使用while...else 和 for...else 还有try...else,另外就是运用with关键字
其他语言中else只可以和if进行组合,也就是我们常见的if...else,但是python为else赋予了新的声明.它可以和while .for .try一起串联使用. 下面我们介绍和while串联 ...
- ROS tf 两个常用的函数
/** \brief Get the transform between two frames by frame ID. * \param target_frame The frame to wh ...
- CF1139A Even Substrings
题目地址:CF1139A Even Substrings 一个数是偶数等价于其最后一位为偶数(2/4/6/8/0) 从左往右扫一遍,如果一个数是奇数则直接跳过,偶数则加上它对答案的贡献 这里的贡献应该 ...
- 【转】Linux下查看系统配置
[转]Linux下查看系统配置 CPU 1. lscpu:显示cpu架构信息 [xxx@localhost ~]$ lscpu Architecture: x86_64 CPU op-mode(s): ...
- 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考
最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...
- Mysql安装与配置调优
一.安装apt-get install mysql-server 需要设置账号密码 apt-get isntall mysql-client apt-get libmysqlclient-dev2.s ...
- 004_wireshark专题
一.常用的wireshark搜索语法 (1) http.request.uri contains "admin/activities" #搜索URL包含"admin/ac ...
- CF 2B The least round way DP+Math
题意: 找出一条路, 使每个节点相乘,得到的数末尾 0 最少 每次移动只能向右或者向下, 找到后打印路径 ///按照题目要求,就是找出一条从左上角到右下角中每个数含2 or 5 最少的路 ///可以用 ...
- GIT 版本管理-github&码云
GIT 是什么 git是一个用于帮助用户实现版本控制的软件. 把本地代码push到远程服务器 git add.git commitpush code to remove machine.git pus ...