[日常训练]article
Description
小今天来写作文啦!
小非常善于堆砌辞藻。在洋洋洒洒写了一长篇之后,小
发现作文中很多段落都似曾相识。小
认为,如果一段字符在文章开头,结尾和中间都出现过,那么这段字符就可以被认为是一个“经典段”。
现在小给你一篇文章,他想知道最长的一段“经典段”长度是多少?
注意,这里要求经典串至少出现三次,分别作为文章的前缀,后缀,及既非前缀也非后缀。
Input
一行,给出一个由小写字母组成的字符串。
Output
输出满足题目要求的非空子串,如果不存在这样的非空子串输出。(字符串严格匹配,不含双引号)
Sample Input
fixprefixsuffix
Sample Output
fix
HINT
字符串长度。
Solution
预处理出这个字符串
能与后缀匹配的前缀最长子串
.
用数组求出
中哪些下标
使得
为
后缀.
匹配
和
,求出最大的
使得
为
后缀.
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 1000005
using namespace std;
int nxt[N],n,ans;
bool f[N];
char a[N],b[N],c[N];
inline void get_nxt(char b[],int n){
for(int i=2,j=0;i<=n;++i){
while(j&&b[j+1]!=b[i]) j=nxt[j];
if(b[j+1]==b[i]) ++j;
nxt[i]=j;
}
}
inline void kmp1(){
int k=0;
for(int i=1,j=0;i<n;++i){
while(j&&b[j+1]!=a[i]) j=nxt[j];
if(b[j+1]==a[i]) ++j;
if(i==n-1) k=j;
}
while(k){
//printf("k=%d\n",k);
f[k]=true;k=nxt[k];
}
}
inline int kmp2(){
int ret=0;get_nxt(a,n);
for(int i=2,j=0;i<n;++i){
while(j&&c[j+1]!=c[i]) j=nxt[j];
if(c[j+1]==c[i])
if(f[++j]) ret=max(ret,j);
}
return ret;
}
inline void print(){
printf("Y can't find any classical string.\n");
}
inline void init(){
scanf("%s",c+1);n=strlen(c+1);
if(n<3){
print();return;
}
for(int i=n,j=1;i>1;--i,++j)
b[j]=c[i];
for(int i=n-1,j=1;i;--i,++j)
a[j]=c[i];
get_nxt(b,n-1);kmp1();
ans=kmp2();
if(ans){
for(int i=ans;i;--i)
printf("%c",b[i]);
printf("\n");
}
else print();
}
int main(){
freopen("article.in","r",stdin);
freopen("article.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return 0;
}
[日常训练]article的更多相关文章
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 「日常训练」 Fire!(UVA-11624)
与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...
- 「日常训练」Known Notation(ZOJ-3829)
题意与分析 题意是这样的:给一个字符串,字符串中只包含数字和运算符'*'.现在问字符串是不是一个合法的逆波兰式(后缀表达式).已知逆波兰式的空格消除,也就是说123可以看成123也可以看成1和23.如 ...
- 「日常训练」 Genghis Khan the Conqueror(HDU-4126)
题意 给定\(n\)个点和\(m\)条无向边(\(n\le 3000\)),需要将这\(n\)个点连通.但是有\(Q\)次(\(Q\le 10^4\))等概率的破坏,每次破坏会把\(m\)条边中的某条 ...
- 「日常训练&知识学习」单调栈
这几天的知识学习比较多,因为时间不够了.加油吧,为了梦想. 这里写几条简单的单调栈作为题解记录,因为单调栈的用法很简单,可是想到并转化成用这个需要一些题目的积淀. 相关博客参见:https://blo ...
- 「日常训练&知识学习」莫队算法(二):树上莫队(Count on a tree II,SPOJ COT2)
题意与分析 题意是这样的,给定一颗节点有权值的树,然后给若干个询问,每次询问让你找出一条链上有多少个不同权值. 写这题之前要参看我的三个blog:Codeforces Round #326 Div. ...
- 「日常训练&知识学习」树的分块(王室联邦,HYSBZ-1086)
题意与分析 这题的题意就是树分块,更具体的看题目(中文题). 学习这一题是为了树的分块,为树上莫队做铺垫. 参考1:https://blog.csdn.net/LJH_KOQI/article/det ...
- 「知识学习&日常训练」莫队算法(一)(Codeforce Round #340 Div.2 E)
题意 (CodeForces 617E) 已知一个长度为\(n\)的整数数列\(a[1],a[2],-,a[n]\),给定查询参数\(l,r\),问\([l,r]\)内,有多少连续子段满足异或和等于\ ...
- 「日常训练&知识学习」树的直径(POJ-1849,Two)
题意 一个城市由节点和连接节点的街道组成,街道是双向的. 此刻大雪覆盖了这个城市,市长确定了一些街道要将它们清扫干净,这些街道保证所有的节点可以通过它们连通而且街道数目尽可能小. 现有两台相同的扫雪机 ...
随机推荐
- http协议(三)几种数据传输方式
说说http协议的一些特点: 1)无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议,即无状态协议. 这种设置的好处是:更快的处理更多的请求事务,确保协议的可伸缩性 不过随着we ...
- windows 10
http://auPL.v4.b1.download.windowsupdate.com/c/updt/2015/07/10240.16384.150709-1700.th1_clientchina_ ...
- Cannot resolve external dependency com.android.support:multidex:1.0.0
multiDexEnabled true 去掉这一行,就OK了,是没有多dex支持么,但是又提供了这个
- NOI2018准备Day3
noip2016成绩出来了,199,268名 noip2017需要考过6个女生才能进省队,不包括明年会突然跳出来的大神...... 今天晚上玩了一晚上,做了2道题. 这事儿只干今晚一次
- iis7 运行 php5.5 的方法
首先添加IIS. 控制面板-〉程序-〉打开或关闭Windows功能 1. 勾选“Internet 信息服务” 2. 勾选“IIS 管理控制台” Internet 信息服务-〉Web 管理工具 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 在线文档预览方案-office web apps
最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...
- lecture7-序列模型及递归神经网络RNN
Hinton 第七课 .这里先说下RNN有recurrent neural network 和 recursive neural network两种,是不一样的,前者指的是一种人工神经网络,后者指的是 ...
- 【基础】利用thrift实现一个非阻塞带有回调机制的客户端
假设读者对thrift有一定了解. 客户端有时需要非阻塞的去发送请求,给定服务端一个请求,要求其返回一个计算结果.但是客户端不想等待服务端处理完,而是想发送完这个指令后自己去做其他事情,当结果返回时自 ...
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...