P3975 [TJOI2015]弦论

题目描述

为了提高智商,ZJY开始学习弦论。这一天,她在《String theory》中看到了这样一道问题:对于一个给定的长度为\(n\)的字符串,求出它的第\(k\)小子串是什么。你能帮帮她吗?

输入输出格式

输入格式:

第一行是一个仅由小写英文字母构成的字符串\(s\)

第二行为两个整数\(t\)和\(k\),\(t\)为\(0\)则表示不同位置的相同子串算作一个,\(t\)为\(1\)则表示不同位置的相同子串算作多个。\(k\)的意义见题目描述。

输出格式:

输出数据仅有一行,该行有一个字符串,为第\(k\)小的子串。若子串数目不足\(k\)个,则输出\(-1\)。

说明

数据范围

对于\(10\%\)的数据,\(n ≤ 1000\)。

对于\(50\%\)的数据,\(t = 0\)。

对于\(100\%\)的数据,\(n ≤ 5 × 10^5, t < 2, k ≤ 10^9\)。


建立后缀自动机,按要求统计每个状态的贡献。

然后在自动机上(非par树)统计一下后缀数量,根据后缀数量进入后面的节点,得到的一条路径即为答案


Code:

#include <cstdio>
#include <cstring>
const int N=1e6+10;
char s[N];
int t,k,n,tax[N],A[N];
int len[N],ch[N][26],siz[N],par[N],sum[N],tot=1,las=1;
void extend(int c)
{
int now=++tot,p=las;
len[now]=len[p]+1,siz[now]=1;
while(p&&!ch[p][c]) ch[p][c]=now,p=par[p];
if(!p) par[now]=1;
else
{
int x=ch[p][c];
if(len[x]==len[p]+1) par[now]=x;
else
{
int y=++tot;
len[y]=len[p]+1,par[y]=par[x];
memcpy(ch[y],ch[x],sizeof ch[x]);
while(p&&ch[p][c]==x) ch[p][c]=y,p=par[p];
par[now]=par[x]=y;
}
}
las=now;
}
int main()
{
scanf("%s%d%d",s+1,&t,&k);
n=strlen(s+1);
for(int i=1;i<=n;i++) extend(s[i]-'a');
for(int i=1;i<=tot;i++) ++tax[len[i]];
for(int i=1;i<=n;i++) tax[i]+=tax[i-1];
for(int i=1;i<=tot;i++) A[tax[len[i]]--]=i;
for(int i=tot;i;i--)
{
if(t) siz[par[A[i]]]+=siz[A[i]];
else siz[A[i]]=1;
}
siz[1]=0;
for(int i=tot;i;i--)
{
sum[A[i]]=siz[A[i]];
for(int c=0;c<26;c++)
sum[A[i]]+=sum[ch[A[i]][c]];
}
if(sum[1]<k) return puts("-1"),0;
int now=1;
while(k>0)
{
int c=0;
while(k>sum[ch[now][c]]) k-=sum[ch[now][c++]];
putchar(c+'a');
now=ch[now][c];
k-=siz[now];
}
return 0;
}

2019.1.7

洛谷 P3975 [TJOI2015]弦论 解题报告的更多相关文章

  1. [洛谷P3975][TJOI2015]弦论

    题目大意:求一个字符串的第$k$大字串,$t$表示长得一样位置不同的字串是否算多个 题解:$SAM$,先求出每个位置可以到达多少个字串($Right$数组),然后在转移图上$DP$,若$t=1$,初始 ...

  2. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  3. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  4. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  5. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  6. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

  7. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

  8. 洛谷 P1272 重建道路 解题报告

    P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...

  9. 洛谷 [HNOI2014]道路堵塞 解题报告

    [HNOI2014]道路堵塞 题意 给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路. 又事SPFA玄学... 有个结论,新的最短路一定是\(1\ ...

随机推荐

  1. Landen邀请码

    Y2PZ6U8 landen 输入邀请码,注册一年会额外赠送一个月,注册两年会额外赠送三个月.

  2. 蜻蜓fm面试

    一面: 面试官首先看简历上写了在腾讯的实习,然后就探讨了半天,各种虚拟化的技术.... 说完之后,估计都半小时过去了,然后就又说了一下你用什么语言,你做的东西都比较偏底层呢,然后你对工作有什么要求吗? ...

  3. map的综合例子

    #include<iostream> #include<string> #include<map> #include<fstream> #include ...

  4. # 20155337《网络对抗》Exp6 信息搜集与漏洞扫描

    20155337<网络对抗>Exp6 信息搜集与漏洞扫描 实践目标 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测 ...

  5. Luogu P1726 上白泽慧音

    这显然是一道求强连通分量(SCC)的题目. 只要你正常,都知道应该写Tarjan. 然后(假装会写Tarjan),其实我当然不会.但是求SCC还有另一个算法.复杂度和Tarjan一样,只不过常数大了点 ...

  6. CentOS7永久挂载硬盘

    刚新装一台服务器,有一块120G的SSD和一块1T的HHD,把cenos7装在了SSD上,进系统默认是找不到HHD的,现需要将其挂载上去. 1.先查看服务器的硬件信息 # fdisk -l 可以看到如 ...

  7. Centos7下vim的table键修改为4个空格

    1.要有root用户权限 2.已经安装vim 3.编辑/etc/vim/vimrc 文件,添加set ts=4 vim /etc/vimrc #按大写G到最后一行,添加set ts= set ts = ...

  8. Java 多线程(三)之线程状态及其验证

    目录 线程状态 Thread.State 状态类型 定义 说明 状态转换 状态验证 「NEW」-> 「RUNNABLE」 -> 「TERMINATED」 「RUNNABLE」 -> ...

  9. MyBatis的一级缓存和二级缓存简介笔记

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  10. JQ_返回顶部

    $(function(){ $('#goto_top_btn').click(function() {var s = $(window).scrollTop(),h = $(window).heigh ...