[DBSDFZOJ 多校联训] Password
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的题...裱死出数据的家伙)
参考代码:
#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的更多相关文章
- [DBSDFZOJ 多校联训] 就
就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...
- Contest1893 - 2019年6月多校联训b层测试1
传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...
- 2019西安多校联训 Day5
T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...
- 2019西安多校联训 Day4
T1 大水题!!难度简单,显然的贪心策略即可,but... 思路:首先我们按与i点作战后活下来的士兵排序,然后 若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加 够再打它,但是!我们在考完试观察测 ...
- 2019西安多校联训 Day3
试题链接:http://www.accoders.com/contest.php?cid=1895 考试密码请私信; 特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面) T1 显然二分求解的 ...
- 2019西安多校联训 Day2
试题链接:http://www.accoders.com/contest.php?cid=1894 考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...
- 2019西安多校联训 Day1
试题链接:http://www.accoders.com/contest.php?cid=1893 考试密码请私信; T1 明明就是O(n)的模拟,强行打成二分QAQ 思路:判断收尾是否为1或 ...
- 三校联训 【NOIP模拟】寻找
题面 “我有个愿望,我希望穿越一切找到你.” 这是个二维平面世界,平面上有n个特殊的果实,我从(0,0)点出发,希望得到尽量多的果实,但是出于某种特殊的原因,我的运动方式只有三种(假设当前我在(x,y ...
- 三校联训 小澳的葫芦(calabash) 题解
题面:小澳的葫芦[ 题目描述]小澳最喜欢的歌曲就是<葫芦娃>.一日表演唱歌,他尽了洪荒之力,唱响心中圣歌.随之,小澳进入了葫芦世界.葫芦世界有 n 个葫芦,标号为 1~ n. n 个葫芦由 ...
随机推荐
- java class load 类加载
1:what is it jvm把描述类的数据从class字节码文件加载到内存,并对数据进行校验.解析.初始化,最终成为jvm直接使用的数据类型 1.ClassNotFoundExcetpion ...
- UVM系统验证基础知识0(Questasim搭建第一个UVM环境)
版权声明:本文为Times_poem原创文章,转载请告知原博主.特别声明:本文在原文基础上做了简单修改以适应文中举例在questasim下的运行,敬请原博主谅解. 需求说明:UVM系统验证 内容 ...
- 利用css实现搜索过滤
无意中找到一种利用css就可实现的搜索过滤的方法,不得不说看了代码之后确实被惊艳到了,亏我之前面试还因为做这个功能做太慢而拖了后腿.在此记录下代码: <!DOCTYPE html> < ...
- 【LeetCode题解】350_两个数组的交集Ⅱ
目录 [LeetCode题解]350_两个数组的交集Ⅱ 描述 方法一:映射 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 Python 实现 [Lee ...
- zabbix自动发现与自动注册及SNMP监控
自动发现与自动注册 自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户端多),时间消耗多. 自动注册:zabb ...
- 数据结构(三)--- B树(B-Tree)
文章图片代码来自邓俊辉老师的课件 概述 上图就是 B-Tree 的结构,可以看到这棵树和二叉树有点不同---"又矮又肥".同时子节点可以有若干个小的子节点构成.那么这样一棵树 ...
- ubuntu16.04 安装 nginx 服务器
在线安装 apt-get install nginx 说明 启动程序文件在/usr/sbin/nginx 日志放在了/var/log/nginx中,分别是access.log和error.log 并已 ...
- layui登录后token问题
layui是一个非常简单且实用的后台管理系统搭建框架,里面的插件丰富使用简单,只需要在原有基础上进行修改即可,但是在数据处理方面略显薄弱,内置的jquery在实际过程中略显不足,若是能添加内置的mvc ...
- C# 后台处理图片的几种方式
第一种: 将上传图片直接保存到本地 var supportedTypes = new[] { "jpg", "jpeg", "png", & ...
- 工厂方法模式(GOF23)
耦合关系直接决定着软件面对变化时的行为 主要对模块之间的关系进行整理,依赖关系倒置(依赖反转),变化快的东西不能影响到变化慢的东西 用封装机制来隔离易变的对象,抽象部分(不易变)和细节部分(可能容易变 ...