题意:求一个字符串的最小表示的开始下标

就当模板题写了

把字符串重复一遍,再建后缀自动机,贪心的选最小字典序在上面走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的更多相关文章

  1. ●POJ 1509 Glass Beads

    题链: http://poj.org/problem?id=1509 题解: 给出一个字符串,有一个操作:把首字符放到末尾,形成新的串.求任意次操作后,字典序最小的串的首字母在原串中的位置.(这就是最 ...

  2. POJ 1509 Glass Beads 后缀自动机 模板 字符串的最小表示

    http://poj.org/problem?id=1509 后缀自动机其实就是一个压缩储存空间时间(对节点重复利用)的储存所有一个字符串所有子串的trie树,如果想不起来长什么样子可以百度一下找个图 ...

  3. POJ 1509 Glass Beads【字符串最小表示法】

    题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串 ...

  4. POJ 1509 Glass Beads

    Description 求字符串的最小循环表示. Sol SAM. 把原串复制一遍,建出SAM,然后每次选最小的一个跑 \(len\) 次,这就是最小循环表示的最后一个节点,然后 \(x-len+1\ ...

  5. UVA 719 / POJ 1509 Glass Beads (最小表示法/后缀自动机)

    题目大意: 给出一个长度为N的字符串,求其字典序最小的循环同构. N<=10W. 算法讨论: 算法一.最小表示法.定义题. 算法二.后缀自动机. Codes: #include <iost ...

  6. PKU 1509 Glass Beads (最小表示法)

    题意:有一个环形字符串,让你找一个位置切一刀使得字符串字母序最小.输出这个位置. 思路:能够看成两个字符串比較.一个是从下标0開始(0~n-1),一个从下标1開始(1~n-1,0). 然后两个指针i= ...

  7. POJ1509 Glass Beads

    Glass Beads Time Limit: 3000MS   Memory Limit: 10000K Total Submissions: 4314   Accepted: 2448 Descr ...

  8. POJ1509 Glass Beads(最小表示法 后缀自动机)

    Time Limit: 3000MS   Memory Limit: 10000K Total Submissions: 4901   Accepted: 2765 Description Once ...

  9. 【POJ1509】Glass Beads

    [POJ1509]Glass Beads [题目描述]给定字符串S,并规定首尾相连成环,求出最小字典序. [输入]输入有多个数据,第一行只包括正整数N,表示有N组数据.每个数据包括一行,输入该字符串. ...

随机推荐

  1. VS操作Sqlite数据库

    如果你下载的Sqlite是不带bundle的版本,那还要把这个SQLite.Interop.dll复制到debug执行文件夹下才能执行.

  2. Git CMD - show: Show various types of objects

    命令格式 git show [options] <object>…​ 实例 a) 查看某次提交的信息 $ git show <commit> b) 查看远程仓库的信息. git ...

  3. POi写入大批量数据

    直接贴代码: package jp.co.misumi.mdm.batch.common.jobrunner; import java.io.File; import java.io.FileNotF ...

  4. CentOS安装Node.js简单教程

    记录一下自己安装过程 先安装gcc-c++编译环境和openssl  代码如下 复制代码 yum install gcc-c++ openssl-devel wget http://nodejs.or ...

  5. Koajs原理

    Koajs让习惯阻塞式代码写法的同学感到很舒服,再也不用盖楼式的callback了,而且也不需要学习Promise的then,catch这些新东西. 但实际上,Koajs这样的写法有点像是语言的语法糖 ...

  6. 你需要知道的三个CSS技巧

    各种浏览器之间的竞争的白热化意味着越来越多的人现在开始使用那些支持最新.最先进的W3C Web标准的设备,以一种更具交互性的方式来访问互联网.这意味着我们终于能够利用更强大更灵活的CSS来创造更简洁, ...

  7. Unity编程回忆录之控制物体移动

    最新心血来潮,然后开始学习Unity3D游戏开发引擎,对于一个主流的跨平台3D游戏开发引擎,我已经深深的为他着迷了,于是果断的开始学习这个引擎,而且刚刚预装的游戏引擎最新版中4.3版本已经开始原生支持 ...

  8. JPA && Spring Data && Spring Data JPA

    1.JPA  Java Persistence API,用于对象持久化的一组API,JPA本身是一组规范,让开发者用同一种方式访问不同的ORM框架.其实也就是java实体对象和关系型数据库建立起映射关 ...

  9. StringBuilder的Append()方法会比+=效率高

    StringBuilder strSql = new StringBuilder(); strSql.Append("select top 1 id from " + databa ...

  10. SQL行列转换:报表_公司采购表_每个公司各采购了些什么产品

    有同学问了个比较典型行列转换的问题,想想,解答如下:数据库有一张表: 是个公司采购表,想转化成如下报表,显示每个公司各采购了些什么产品: 哪些公司采购哪些产品是不确定的,所以报表的列有哪几项是不确定的 ...