1509 -- Glass Beads POJ
题意:求一个字符串的最小表示的开始下标
就当模板题写了
把字符串重复一遍,再建后缀自动机,贪心的选最小字典序在上面走len步
因为走出来的一定是子串,长度又是len,所以一定是原来的字符串旋转得到的,就解决了
const
maxn=;
type
node=record
go:array[..]of longint;
step,fa:longint;
end; var
sam:array[..maxn]of node;
s,ans:ansistring;
len,tot,last,t:longint; procedure add(x:longint);
var
now,new,q:longint;
begin
inc(tot);
now:=tot;
fillchar(sam[now].go,sizeof(sam[now].go),);
sam[now].step:=sam[last].step+;
while (last<>)and(sam[last].go[x]=) do
begin
sam[last].go[x]:=now;
last:=sam[last].fa;
end;
if last= then sam[now].fa:=
else
begin
q:=sam[last].go[x];
if sam[q].step=sam[last].step+ then sam[now].fa:=q
else
begin
inc(tot);
new:=tot;
sam[new]:=sam[q];
sam[q].fa:=new;
sam[now].fa:=new;
sam[new].step:=sam[last].step+;
while (last<>)and(sam[last].go[x]=q) do
begin
sam[last].go[x]:=new;
last:=sam[last].fa;
end;
end;
end;
last:=now;
end; procedure main;
var
i,j,k:longint;
begin
readln(s);
s:=s+s;
len:=length(s);
last:=;
tot:=;
sam[].fa:=;
sam[].step:=;
fillchar(sam[].go,sizeof(sam[].go),);
for i:= to len do
add(ord(s[i])-ord('a'));
i:=;
j:=;
ans:='';
while j<len>> do
begin
inc(j);
for k:= to do
if sam[i].go[k]<> then break;
ans:=ans+chr(k+ord('a'));
i:=sam[i].go[k];
end;
writeln(pos(ans,s));
end; begin
readln(t);
while t<> do
begin
main;
dec(t);
end;
end.
1509 -- Glass Beads POJ的更多相关文章
- ●POJ 1509 Glass Beads
题链: http://poj.org/problem?id=1509 题解: 给出一个字符串,有一个操作:把首字符放到末尾,形成新的串.求任意次操作后,字典序最小的串的首字母在原串中的位置.(这就是最 ...
- POJ 1509 Glass Beads 后缀自动机 模板 字符串的最小表示
http://poj.org/problem?id=1509 后缀自动机其实就是一个压缩储存空间时间(对节点重复利用)的储存所有一个字符串所有子串的trie树,如果想不起来长什么样子可以百度一下找个图 ...
- POJ 1509 Glass Beads【字符串最小表示法】
题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串 ...
- POJ 1509 Glass Beads
Description 求字符串的最小循环表示. Sol SAM. 把原串复制一遍,建出SAM,然后每次选最小的一个跑 \(len\) 次,这就是最小循环表示的最后一个节点,然后 \(x-len+1\ ...
- UVA 719 / POJ 1509 Glass Beads (最小表示法/后缀自动机)
题目大意: 给出一个长度为N的字符串,求其字典序最小的循环同构. N<=10W. 算法讨论: 算法一.最小表示法.定义题. 算法二.后缀自动机. Codes: #include <iost ...
- PKU 1509 Glass Beads (最小表示法)
题意:有一个环形字符串,让你找一个位置切一刀使得字符串字母序最小.输出这个位置. 思路:能够看成两个字符串比較.一个是从下标0開始(0~n-1),一个从下标1開始(1~n-1,0). 然后两个指针i= ...
- POJ1509 Glass Beads
Glass Beads Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 4314 Accepted: 2448 Descr ...
- POJ1509 Glass Beads(最小表示法 后缀自动机)
Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 4901 Accepted: 2765 Description Once ...
- 【POJ1509】Glass Beads
[POJ1509]Glass Beads [题目描述]给定字符串S,并规定首尾相连成环,求出最小字典序. [输入]输入有多个数据,第一行只包括正整数N,表示有N组数据.每个数据包括一行,输入该字符串. ...
随机推荐
- RedirectFromLoginPage和FormsAuthenticationTicket的区别
如果你对.net身份验证不是很清晰,请看本文.本文用简单明了的语言,让你对RedirectFromLoginPage和FormsAuthenticationTicket有一个完整的认识. 1)Form ...
- VHD轻松实现双系统
VHD 是微软虚拟磁盘文件. VHD(Microsoft Virtual Hard Disk format). 目前可以使用Microsoft Virtual PC 2007 and Micros ...
- iMAC——全新重装Mac系统
在参考网上重装Mac系统教程的时候,感觉这篇教程挺不错: http://www.iplaysoft.com/osx-yosemite-usb-install-drive.html (此教程终端命令处需 ...
- String.Trim
String.Trim有2个重载方法,分别是:Trim()和Trim(char[]),根据官方的解释 Trim():从当前String对象移除所有前导空白字符和尾部空白字符. Trim(char[]) ...
- VS 2013的初配置
首先,安装vs2013,安装过程比较简单,也已有教程,在此不赘述.只想说一下,vs2013需要占C盘比较大的空间:所有功能都安装,且装在C盘的话,约需要9G左右,即使安装在其他盘,也需要占C盘6G左右 ...
- vm安装mac系统
零:起因想学习IOS开发,但是mac pro和mac mini都舍不得买,去apple店体验了几次mac不怎么喜欢,so… 一:原料VMware-workstation-full-12.0.0-298 ...
- Java多线程(一) 多线程的基本使用
在总结JDBC数据库连接池的时候,发现Java多线程这块掌握得不是很好,因此回头看了下多线程的内容.做一下多线程模块的学习和总结,稳固一下多线程这块的基础.关于多线程的一些理论知识,这里不想啰嗦太多, ...
- Java常见知识问答
1.String.StringBuilder.StringBuffer (1).String是字符串常量,不允许改变 (2).StringBuffer先开辟了一块空间,可以允许改变,即向这个空间添加值 ...
- php环境扩展包so
http://files.cnblogs.com/files/adtuu/no-debug-non-zts-20121212.zip /Applications/XAMPP/xamppfiles/li ...
- VLAN和Trunk
Vlan实验题: 如图所示 解答过程 (一)相同vlan之间的设备全连通 1. 在SW1和SW2上分别创建vlan2和vlan3, 命令如下 SW1# vlan database SW1(vlan)# ...