CF126B Password

题意:

给出一个字符串 H,找一个最长的字符串 h,使得它既作为前缀出现过、又作为后缀出现过、还作为中间的子串出现过。

解法:

沿着 $ next_n $ 枚举字符串,如果这个值在 $ next_I (i < n)$ 中出现合法。

预处理出 $ next $ 数组后记录那些值在 $ next $ 当中出现过,从 $ next_n $ 开始判断,如果不合法则从i 跳到 $ next_i $ 继续判断。

CODE:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set> using namespace std; const int N = 1e6 + 10; set<int > st;
int len,nxt[N];
char ch[N];
bool flag; void kmp() {
nxt[0] = nxt[1] = 0;
for(int i = 1 ; i <= len ; i++) {
int j = nxt[i];
while(j && ch[i] != ch[j]) j = nxt[j];
nxt[i + 1] = (ch[j] == ch[i] ? j + 1 : 0);
}
} int main() {
scanf("%s",ch+1);
len = strlen(ch + 1);
kmp();
st.clear();
for(int i = 1 ; i <= len ; i++)
st.insert(nxt[i]);
flag = 0;
int j = len;
while(nxt[j]) {
if(st.count(nxt[j])) {
flag = 1;
for(int i = 1 ; i <= nxt[j] ; i++)
printf("%c",ch[i]);
puts("");
break;
}
j = nxt[j];
}
if(!flag) puts("Just a legend");
return 0;
}

CF126B的更多相关文章

  1. cf126b(kmp好题)

    http://codeforces.com/contest/126/problem/B #include<bits/stdc++.h> using namespace std; const ...

  2. KMP CF126B Password

    Description Asterix,Obelix和他们的临时伙伴Suffix.Prefix已经最终找到了和谐寺.然而和谐寺大门紧闭,就连Obelix的运气也没好到能打开它. 不久他们发现了一个字符 ...

  3. CF126B password&&HDU 4763 Theme Section

    http://acm.hdu.edu.cn/showproblem.php?pid=4763 http://codeforces.com/problemset/problem/126/B 这两个题都是 ...

  4. CF126B Password【KMP】By cellur925

    题目传送门 其实$Chemist$在之前写了非常棒的题解! 我长话短说,补充两句. “那么当$next[n]$>$max$时显然不能将$next[n]$作为最长子串的长度”这句话其实在说,因为一 ...

  5. CF126B Password

    思路: kmp略作修改. 实现: #include <iostream> #include <cstdio> using namespace std; ; int neXt[M ...

  6. 「CF126B」Password

    题目描述 给定一个字符串 \(S\),我们规定一个字符串 \(P\) 是可行解,\(P\) 需要满足: \(P\) 是 \(S\) 的前缀 \(P\) 是 \(S\) 的后缀 \(P\) 出现在 \( ...

  7. 浅谈KMP算法——Chemist

    很久以前就学过KMP,不过一直没有深入理解只是背代码,今天总结一下KMP算法来加深印象. 一.KMP算法介绍 KMP解决的问题:给你两个字符串A和B(|A|=n,|B|=m,n>m),询问一个字 ...

  8. 2021.08.30 前缀函数和KMP

    2021.08.30 前缀函数和KMP KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com) KMP算法next数组的一种理解思路 - 挠到头秃 - 博 ...

随机推荐

  1. 织梦dedecms自定义搜索可以按照附加表字段进行搜索

    因为需要在网上搜索了一下找到此修改方法: 首先 是新建模型:商标信息 模型:附加表为dede_shangbiao ,附加字段先添加了2个,sbID(商标ID)和chuangyi(创意说明)然后 打开需 ...

  2. python 数据类型 datatype

    python  数据类型 datatype 列表list 元组tuple 集合set 字典dictionary 字符串string 一.列表list list :python的一种数据类型.是可变的, ...

  3. Java_myBatis_XML代理_动态SQL

    主要是设计到映射文件的编写: SELECT: <sql id="query_user_where"> <!-- test里面可以编写OGNL表达式 --> ...

  4. 记录一次nginx的upstream的配置信息

    nginx的upstream的配置信息 upstream qq.xiaoyu.cn { server 192.168.1.139:80 max_fails=3 fail_timeout=30s; se ...

  5. nginx错误集合

    遇到 nginx: [warn] server name "http://127.0.0.1" has suspicious symbols in D:\nginx-1.12.1/ ...

  6. springcloud报错集合

    springcloud启动报错Connection refused: connect 参考:https://blog.csdn.net/deemo__/article/details/78932401 ...

  7. Redis在Windows上使用和集群配置

    一.什么是Redis Redis是一个开源的,使用C语言编写的面向键值对类型的分布式Nosql数据库系统,功能类似Memcache,但比Memcache功能更丰富.官网地址:https://redis ...

  8. Java基础其他

    1. 二进制 进制就是进位制,常见的有二进制.十进制.十六进制等 在进制中,可用符号的数量称为基数,基数为n就称为n进制,逢n进一位: 二进制:0 1 十进制:0 1 2 3 4 5 6 7 8 9 ...

  9. VSCode 拓展插件推荐

    想让VS code干活快起来,插件少不了,开始吧: 快捷键:Ctrl+Shift+X打开插件搜索安装即可 (安装的插件通常会保存在这个目录:C:\Users\你的系统登录用户如administrato ...

  10. 初识java和C的不同

     学习java语言,发现C语言的语法尽管很类似,但是java的代码编写与C语言却大不相同. 一,java的类,首先接触到的是类这个思想,类中可以定义属性,可以用方法来对属性进行相应的操作: 二,jav ...