BZOJ - 3998 弦论 (后缀自动机)
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e6+,M=;
char s[N],s2[N];
int n,f,k;
struct SAM {
int go[N][M],pre[N],mxl[N],c[N],ss[N],tot,last,siz[N],sum[N],vis[N],mx;
void init() {last=tot=; newnode(); pre[]=-;}
int newnode(int l) {
int u=tot++;
memset(go[u],,sizeof go[u]);
mxl[u]=l,siz[u]=;
return u;
}
void add(int ch) {
int p=last,np=last=newnode(mxl[p]+);
siz[np]=;
for(; ~p&&!go[p][ch]; p=pre[p])go[p][ch]=np;
if(!~p)pre[np]=;
else {
int q=go[p][ch];
if(mxl[q]==mxl[p]+)pre[np]=q;
else {
int nq=newnode(mxl[p]+);
memcpy(go[nq],go[q],sizeof go[nq]);
pre[nq]=pre[q],pre[q]=pre[np]=nq;
for(; ~p&&go[p][ch]==q; p=pre[p])go[p][ch]=nq;
}
}
}
void build(char* s,int n) {init(); for(int i=; i<n; ++i)add(s[i]-'a');}
void toposort() {
for(int i=; i<tot; ++i)c[i]=;
for(int i=; i<tot; ++i)++c[mxl[i]];
for(int i=; i<tot; ++i)c[i]+=c[i-];
for(int i=; i<tot; ++i)ss[--c[mxl[i]]]=i;
}
void getsiz() {
for(int i=tot-; i>; --i)siz[pre[ss[i]]]+=siz[ss[i]];
siz[]=;
}
void getsum() {
for(int i=; i<tot; ++i)sum[i]=siz[i];
for(int i=tot-; i>=; --i)
for(int j=; j<M; ++j)if(go[ss[i]][j])sum[ss[i]]+=sum[go[ss[i]][j]];
}
void qry(int u,int k) {
int dep;
for(dep=; k>siz[u]; ++dep) {
k-=siz[u];
for(int i=; i<M; ++i) {
int v=go[u][i];
if(!v)continue;
if(k<=sum[v]) {s2[dep]=i+'a',u=v; break;}
k-=sum[v];
}
}
s2[dep]=,puts(s2);
}
void run() {
build(s,n);
toposort();
if(f)getsiz();
else {for(int i=; i<tot; ++i)siz[i]=; siz[]=;}
getsum();
if(sum[]<k)puts("-1");
else qry(,k);
}
} sam;
int main() {
scanf("%s%d%d",s,&f,&k),n=strlen(s);
sam.run();
return ;
}
BZOJ - 3998 弦论 (后缀自动机)的更多相关文章
- bzoj 3998 弦论 —— 后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3998 关于相同子串算一个还是算多个,其实就是看一种状态的 right 集合是否加上 Pare ...
- BZOJ 3998: [TJOI2015]弦论 后缀自动机 后缀自动机求第k小子串
http://www.lydsy.com/JudgeOnline/problem.php?id=3998 后缀自动机应用的一个模板?需要对len进行一个排序之后再统计每个出现的数量,维护的是以该字符串 ...
- BZOJ 3998 TJOI2015 弦论 后缀自动机+DAG上的dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3998 题意概述:对于一个给定长度为N的字符串,求它的第K小子串是什么,T为0则表示不同位置 ...
- BZOJ 3998 [TJOI2015]弦论 ——后缀自动机
直接构建后缀自动机. 然后. 然后只需要再后缀自动机的go树上类似二分的方法进行查找即可,实际上是“26分”. 然后遇到了处理right集合的问题,然后觉得在go和parent树上上传都是可以的,毕竟 ...
- 【BZOJ-3998】弦论 后缀自动机
3998: [TJOI2015]弦论 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2018 Solved: 662[Submit][Status] ...
- 【BZOJ3998】[TJOI2015]弦论 后缀自动机
[BZOJ3998][TJOI2015]弦论 Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T ...
- BZOJ 2882: 工艺( 后缀自动机 )
把串S复制成SS然后扔进后缀自动机里, 从根选最小的儿子走, 走N步就是答案了...一开始还想写个treap的...后来觉得太麻烦..就用map了... ----------------------- ...
- [bzoj3998][TJOI2015]弦论-后缀自动机
Brief Description 给定一个字符串, 您需要求出他的严格k小子串或非严格k小子串. Algorithm Design 考察使用后缀自动机. 首先原串建SAM, 然后如果考察每个状态代表 ...
- bzoj 3277 & bzoj 3473,bzoj 2780 —— 广义后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3277 https://www.lydsy.com/JudgeOnline/problem.p ...
随机推荐
- WinForm和WPF中注册热键
由于.Net没有提供专门的类库处理热键,所以需要直接调用windows API来解决. HotKey为.NET调用Windows API的封装代码,主要是RegisterHotKey和Unregist ...
- django设置mysql为数据库笔记
1,guest/settings.py中加上 import pymysql pymysql.install_as_MySQLdb() 安装好pymysql 2,guest/settings.py的DA ...
- 删除mysl
mysql卸载不干净会很麻烦 1.yum remove mysql mysql-server mysql-libs compat-mysql51 2.rm -rf /var/lib/mysql 检查是 ...
- 应用安全 - 中间件 - IIS - 漏洞 - 汇总
简介 支持协议 HTTP HTTP/2 HTTPS FTP FTPS SMTP NNTP等 支持操作系统 NT/2000/XP Professional/Server 2003及后续版本(XP Hom ...
- 基于vant实现一个问卷调查
实现背景 最近学习<vue实战>,第二篇进阶篇有一个练习 刚好最近在研究vue移动端框架vant 两者结合,实现这么个小项目 实现代码 新建 vue单文件 L0529L.vue <t ...
- IDEA github 上传项目, 拉取, 删除
1.IDEA登录github账号 settings -> Version Controller -> GitHub 用户名密码登录 或token登录都可以 2.VCS -> impo ...
- jenkins pipline和jenkinsfile
Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中. Jenkins Pipeline 提供了一套可扩展 ...
- python selenium中Excel数据维护(二)
接着python里面的xlrd模块详解(一)中我们我们来举一个实例: 我们来举一个从Excel中读取账号和密码的例子并调用: ♦1.制作Excel我们要对以上输入的用户名和密码进行参数化,使得这些数据 ...
- tableau分布式添加节点
参考: 两节点的安装:https://zhuanlan.zhihu.com/p/44732932https://help.tableau.com/current/server-linux/zh-cn/ ...
- 7大python 深度学习框架的描述及优缺点绍
Theano https://github.com/Theano/Theano 描述: Theano 是一个python库, 允许你定义, 优化并且有效地评估涉及到多维数组的数学表达式. 它与GPUs ...