SPOJ_SUBLEX
经典题目:给一个字符串,求字典序第k小的子串是什么。
涉及子串问题,上自动机。
首先我们可以用记忆化搜索的方法,求出到达某一个状态后,能产生多少个新状态。
首先,到达这个状态就不走了,这肯定是一种状态,然后分别考虑后面的26个指针就好了。
不过如果不记忆化肯定是要T的,而且如果用dp好像会有一点问题,因为状态转移不是严格的满足小号点到大号点(nq点啦)。
然后就是赤果果的dfs就可以啦。
对了还有一个有趣的事情,一开始我输出字符的地方T了,后来改变字符串的输出方式,然后就A了。spoj真是奇葩呀。能买个好点服务器吗?
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 222222
using namespace std; int next[maxn][26],pre[maxn],step[maxn],f[maxn];
char s[maxn];
int N,last,n,k;
int p,q,np,nq; void insert(int x,int m)
{
p=last,np=++N,step[np]=m;
while (p!=-1 && next[p][x]==0) next[p][x]=np,p=pre[p];
last=np;
if (p==-1) return;
q=next[p][x];
if (step[q]==step[p]+1) { pre[np]=q; return; }
nq=++N,step[nq]=step[p]+1,pre[nq]=pre[q];
for (int i=0; i<26; i++) next[nq][i]=next[q][i];
pre[np]=pre[q]=nq;
for (;p!=-1 && next[p][x]==q; p=pre[p]) next[p][x]=nq;
} int get(int x)
{
if (f[x]!=0) return f[x];
f[x]=1;
for (int i=0; i<26; i++) if (next[x][i]) f[x]+=get(next[x][i]);
return f[x];
} void output(int pos,int num,int L)
{
num--;
if (num==0)
{
s[L]='\0';
printf("%s\n",s+1);
return;
}
for (int i=0; i<26; i++)
{
if (next[pos][i]==0) continue;
if (f[next[pos][i]]<num) num-=f[next[pos][i]];
else
{
s[L]='a'+i;
output(next[pos][i],num,L+1);
return;
}
}
} int main()
{
pre[0]=-1;
scanf("%s",s);
for (int i=0; s[i]; i++) insert(s[i]-'a',i+1);
f[0]=get(0);
scanf("%d",&n);
while (n--)
{
scanf("%d",&k);
output(0,k+1,1);
}
return 0;
}
SPOJ_SUBLEX的更多相关文章
随机推荐
- jquery几秒钟之后跳转页面
<script> window.onload = function() { var el = document.getElementById('js-tip-timer'), i = 5; ...
- SSIS 控制流和数据流
在SSIS的体系结构中,Package是SSIS的最重要的部分,从本质上来讲,Package是一个有序地执行任务的单元.Package的核心是控制流(Control Flow),用于协调包中所有组件的 ...
- python连接数据库问题小结
在使用python连接数据库的时候遇到了这个问题: 大概意思就是在django的setting.py中配置的用户名和密码报错. 主要就是修改setting.py的配置 其中在里边的name和user项 ...
- css布局笔记(二)Flex
flex Flex是"Flexible Box"的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可指定为Flex布局. .box{di ...
- Jmeter+ant+jenkins接口自动化测试 平台搭建(三)
四.报告优化 Jmeter 默认生成报告不是很详细,因此我们需要进行优化.这里我们使用新的报告模板:默认的报告模板是 jmeter-results-detail-report_21.xsl 先上效果图 ...
- [学习笔记]PCL使用心得
最近开始做研究生毕设,有一部分因为没有什么好的思路,就把以前用过的PCL点云搬出来,重新用源码装了一遍PCL,一开始装的过程中没什么大问题,在后面用的时候碰到了很多小问题,特此记录. 1.PCL版本问 ...
- [Lua] 迭代器 闭合函数 与 泛型for
首先看看一下闭合函数(closure),见如下代码: function newCounter() local i = 0 -- 非局部变量(non-local variable) return fun ...
- 《杜增强讲Unity之Tanks坦克大战》6-发射子弹
6 发射子弹 本节完成发射子弹的功能,最终代码如下: image 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...
- [Codeforces-911B] - Two Cakes
B. Two Cakestime limit per test 1 secondmemory limit per test 256 megabytesinput standard inputoutpu ...
- Received non-all-whitespace CHARACTERS or CDATA event in nextTag(). ,无法整齐打印验证错误。 解析XML文档出现的问题
在启动keyCloak,想要在standAlone模式下切换数据库,修改standAlone.xml文件时. 在bin/目录下启动standAlone模式出现错误: 10:07:24,799 INFO ...