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 ...
随机推荐
- [ubuntu]如何实现双屏显示
一.首先直接运行xrandr命令,查看设备的相关信息: 运行之后会显示当前连接设备的屏幕信息,如下图 PS:我已经用HDMI线连接了外接显示器和主机 wangju@wangju-HP--G4:~$ x ...
- react目录结构、demo实例详解、属性数据绑定方式
1.目录结构 2.demo实例详解 a)创建Home.js import React, { Component } from 'react'; //创建一个组件必须要集成Component组件,且组件 ...
- 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制
创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Auto ...
- nmon报告指标含义
nmon分析文件详细指标详解指标类型指标名称指标含义SYS_SUMMCPU%cpu占有率变化情况:IO/secIO的变化情况:AAAAIXAIX版本号:buildbuild版本号:command执行命 ...
- Python文件重命名代码
import os def re_name(path): for file in os.listdir(path): file_path = os.path.join(path, file) # 判断 ...
- linux使用df查看硬盘使用率
df 是来自于coreutils 软件包,系统安装时,就自带的:我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置: df -lh [root@iZ28u0bdecbZ ~]# df -h ...
- jenkins 配置 gitlab webhook 实现自动发布
测试环境需要git提交代码后,Jenkins自动部署,需要gitlab配置project webhook. 1,Jenkins版本2.89 gitlab 8.11 2,Jenkins需要安装插件:G ...
- JS中document对象 && window对象
所有的全局函数和对象都属于Window对象的属性和方法. 区别: 1.window 指窗体.Window 对象表示浏览器中打开的窗口. document指页面.document是window的一个子对 ...
- 二叉搜索树倒序O(nlogn)建树
由于在某些糟糕情况下,二叉查找树会退化成链,故而朴素建树过程其复杂度可能会退化成\(O(n^2)\). 采用倒序连边建树的方法可以使得二叉查找树建树复杂度稳定在\(O(nlogn)\). 具体思路如下 ...
- 【转载】ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
转载出处 在网上下载了一个免安装包的MySQL,准备自己create database jhp_test,使用的时候出现报错,如下: ERROR (): Access denied for user ...