Password

password.in/.out

描述

你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s。

传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s 的后缀并且还在 s 的中间位置出现过一次。

如果存在这样的串,请你输出这个串,如有多个满足条件的串,输出最长的那一个。

如果不存在这样的串,输出"Just a legend"(去掉引号)。

输入格式

仅一行,字符串 s。

输出格式

如题所述

样例输入

fixprefixsuffix

样例输出:

fix

数据范围

对于 60%的数据, s 的长度<=100

对于 100%的数据, s 的长度<=100000

看到"同时是前缀与后缀的串的长度"可能大家都能想到 $KMP$ 算法w

但是题目对于这个串有一定限制: 必须在中间出现过至少一次. 所以我们计算出这个串的长度之后还要拿着这个串进原串匹配一发, 如果匹配次数达到 $3$ 或以上就说明这个串除了在两端出现过之外还在中间出现了至少一次. 如果没有在中间出现则在刚刚验证失败的子串内接着找同时是这个串前缀与后缀的串的最大长度.

也就是说先求 $KMP$ 中的失配边, 然后在不符合题意的时候一直跳失配边就好了.

跳到最后还是没有匹配到说明无解.

(考试的时候输入数据神特么文件尾没有空行(╯‵□′)╯︵┻━┻逐字符读入直接死循环然后本来能A的题...裱死出数据的家伙)

参考代码:

GitHub

 #include <cctype>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> const int MAXN=; int len;
int fail[MAXN];
char buffer[MAXN]; int Read(char*);
void Print(char*,int);
void KMP(char*,int*,int);
int Match(char*,int,char*,int,int*); int main(){
scanf("%s",buffer);
len=strlen(buffer);
KMP(buffer,fail,len);
for(int k=fail[len];k>;k=fail[k]){
if(Match(buffer,len,buffer,k,fail)>){
Print(buffer,k);
return ;
}
}
puts("Just a legend");
return ;
} void KMP(char* buf,int* f,int len){
int j=,k=-;
f[]=-;
while(j<len){
if(k==-||buf[j]==buf[k]){
f[++j]=++k;
}
else k=f[k];
}
} int Match(char* buf,int lb,char* ptn,int lp,int* f){
int j=,ans=;
for(int i=;i<lb;i++){
while(j>&&buf[i]!=ptn[j])
j=f[j];
if(buf[i]==ptn[j])
j++;
if(j==lp){
ans++;
j=f[j];
}
}
return ans;
} inline void Print(char* buf,int len){
for(int i=;i<len;i++){
putchar(buf[i]);
}
putchar('\n');
} inline int Read(char* buf){
int pos=;
do{
buf[pos]=getchar();
}while(isspace(buf[pos]));
while(!isspace(buf[pos])&&buf[pos]!=EOF){
buf[++pos]=getchar();
}
buf[pos]='\0';
return pos;
}

Backup

[DBSDFZOJ 多校联训] Password的更多相关文章

  1. [DBSDFZOJ 多校联训] 就

    就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...

  2. Contest1893 - 2019年6月多校联训b层测试1

    传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...

  3. 2019西安多校联训 Day5

    T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...

  4. 2019西安多校联训 Day4

    T1 大水题!!难度简单,显然的贪心策略即可,but... 思路:首先我们按与i点作战后活下来的士兵排序,然后 若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加 够再打它,但是!我们在考完试观察测 ...

  5. 2019西安多校联训 Day3

    试题链接:http://www.accoders.com/contest.php?cid=1895    考试密码请私信; 特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面) T1 显然二分求解的 ...

  6. 2019西安多校联训 Day2

    试题链接:http://www.accoders.com/contest.php?cid=1894   考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...

  7. 2019西安多校联训 Day1

    试题链接:http://www.accoders.com/contest.php?cid=1893  考试密码请私信;    T1 明明就是O(n)的模拟,强行打成二分QAQ 思路:判断收尾是否为1或 ...

  8. 三校联训 【NOIP模拟】寻找

    题面 “我有个愿望,我希望穿越一切找到你.” 这是个二维平面世界,平面上有n个特殊的果实,我从(0,0)点出发,希望得到尽量多的果实,但是出于某种特殊的原因,我的运动方式只有三种(假设当前我在(x,y ...

  9. 三校联训 小澳的葫芦(calabash) 题解

    题面:小澳的葫芦[ 题目描述]小澳最喜欢的歌曲就是<葫芦娃>.一日表演唱歌,他尽了洪荒之力,唱响心中圣歌.随之,小澳进入了葫芦世界.葫芦世界有 n 个葫芦,标号为 1~ n. n 个葫芦由 ...

随机推荐

  1. 公司Git实用记录

    一.git命令名词解释 1.添加/跟踪/暂存:添加到本地索引 git add 文件名 2.提交:提交到本地仓库 git commit -m '注释' 3.推送:将提交到本地仓库的所有更新提交到服务器 ...

  2. 反射 XMLUtil

    package com.dys.util; import java.beans.Introspector; import java.beans.PropertyDescriptor; import j ...

  3. 数据库SQLITE3初识

    数据库DataBase,我们都没有接触过数据库,那么数据库是什么? 它是一个有结构的.集成的.可共享的统一管理的数据集合! 所谓有结构的,指的是数据是按一定的模型组织起来的. 简单的说,拿个箱子,用隔 ...

  4. Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动

    问题:Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动 解决:从U盘启动安装的时候,会卡住不动.搞定办法相当简单,修改syslinux/syslinuxfg文件:将defa ...

  5. linux和Android的Makefile和android.mk

    1. makefile 1.1 gcc的参数 -Wall: 是打开警告开关, -O:    代表默认优化,可选:-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化. -g ...

  6. [转]OPEN(SAP) UI5 学习入门系列之一:扫盲与热身(上)

    本文转自:http://www.cnblogs.com/qianmarv/p/4671394.html 1 扫盲 什么是SAP Fiori? 了解SAP UI5必须要从SAP Fiori开始,两者概念 ...

  7. var、let、const的区别,以及作用范围。

    在es5中一般经常使用的变量有两个级别,一个是用var声明的全局级别的变量,另外一个是函数级别是用var生命在函数内的.本文中将详细讲解我对es6中的const和let的区别. let的使用以及作用范 ...

  8. 关于设置服务器为https服务器

    主要是设置IIS: step1:打开Internet 信息服务(IIS)管理器——选择网站,编辑绑定   step2:添加https,如下图,这样如果不设置SSL的话就两种都可以进去网站 如果想要设置 ...

  9. 01 使用JavaScript原生控制div属性

    写在前面: 因对前端开发感兴趣,于是自学前端技术,现在已经会HTML.CSS.JavaScript基础技术.但水平处于小白阶段,在网上找一些小项目练练手,促进自己的技术成长.文章记录自己的所思所想,以 ...

  10. Java - “JUC”原子类

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...