CF126B
2024-08-30 18:21:09
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;
}
最新文章
- angular路由详解:
- Redis 主从配置
- VBA_Excel_教程:Option,错误处理
- 移动零售批发行业新的技术特色-智能PDA手持移动扫描打印销售开单收银仪!!
- PHP使用Xdebug进行远程调试
- regsvr32 注册.dll的用法
- bzoj 1185 旋转卡壳 最小矩形覆盖
- JS获取事件源对象
- 核心业务系统数据库平台迁移: Oracle ->; MySQL
- [转] Linux文件系统之hard link&;symbol link
- This application failed to start because it could not find or load the Qt platform plugin &;quot;xcb&;quot;.
- javascript 中 apply(或call)方法的用途----对象的继承
- C#的内存管理原理解析+标准Dispose模式的实现
- 安卓中的事件分发机制之View控件
- jquery 第二章
- [c/c++] programming之路(27)、union共用体
- 转载 -- CSS3 中关于 select 下拉列表的样式
- 信用评分及模型原理解析(以P2P网贷为例)
- 【AI】基本概念-准确率、精准率、召回率的理解
- 实战ELK(2) ElasticSearch 常用命令