POJ 1509 Glass Beads---最小表示法
题意:
T组数据,每组数据给出一个字符串,求这个字符串的最小表示发(只要求输出起始位置坐标)
SAM入门题(检测板子是否正确)。
将字符串S加倍丢进SAM中,然后走字符串长度次,每次贪心的沿最小的边走,然后答案就是:sam.e[po].len-len+1
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define SIZE 26
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,T; char s[maxn]; struct SAM
{
struct
{
llg len,f/*parent边*/,ch[SIZE];
void init()
{
len=,f=-;
memset(ch,0xff,sizeof(ch));
}
}e[maxn<<];
llg idx,last; void init() {idx=last=; e[idx++].init();} int newnode() {e[idx].init(); return idx++;} void add(llg c)
{
int end=newnode(),tmp=last;
e[end].len=e[last].len+;
for (;tmp!=- && e[tmp].ch[c]==-;tmp=e[tmp].f){e[tmp].ch[c]=end;}//跳parent tree的边,找到第一个具有c出边的点并停下,对于没有的点连出一条边权是c的边指向当前点(end)。
if (tmp==-) e[end].f=;//如果没有任何一个点有权值为c的出边,则说明了相应字符c是第一次出现在自动机中。
else
{
llg nxt=e[tmp].ch[c];
if (e[tmp].len+==e[nxt].len) e[end].f=nxt;//如果找到的第一个具有出边c的点的出边c左指向点的len=lastlen+1,则直接把新建点的parent边连向nxt点。
else
{
llg np=newnode();
e[np]=e[nxt];
e[np].len=e[tmp].len+;//新建点np
e[nxt].f=e[end].f=np;
for (;tmp!=- && e[tmp].ch[c]==nxt;tmp=e[tmp].f) {e[tmp].ch[c]=np;}//沿parent边往祖先走把所有原本连向nxt的带边权c的边改为连向np
}//如果不满足MAX(s)+1=MAX(s[tmp][c])则新建点
}
last=end;
}
}sam; int main()
{
yyj("SAM");
cin>>T;
while (T--)
{
sam.init();
scanf("%s",s);
llg len=strlen(s);
for (llg i=;i<len;i++) sam.add(s[i]-'a');
for (llg i=;i<len;i++) sam.add(s[i]-'a');
llg po=;
for (llg i=;i<len;i++)
for (llg j=;j<;j++)
if (sam.e[po].ch[j]!=-)
{
po=sam.e[po].ch[j];
break;
}
printf("%lld\n",sam.e[po].len-len+);
}
return ;
}
POJ 1509 Glass Beads---最小表示法的更多相关文章
- UVA 719 / POJ 1509 Glass Beads (最小表示法/后缀自动机)
题目大意: 给出一个长度为N的字符串,求其字典序最小的循环同构. N<=10W. 算法讨论: 算法一.最小表示法.定义题. 算法二.后缀自动机. Codes: #include <iost ...
- POJ 1509 Glass Beads【字符串最小表示法】
题目链接: http://poj.org/problem?id=1509 题意: 求循环字符串的最小表示. 分析: 浅析"最小表示法"思想在字符串循环同构问题中的应用 判断两字符串 ...
- ●POJ 1509 Glass Beads
题链: http://poj.org/problem?id=1509 题解: 给出一个字符串,有一个操作:把首字符放到末尾,形成新的串.求任意次操作后,字典序最小的串的首字母在原串中的位置.(这就是最 ...
- POJ1509 Glass Beads(最小表示法 后缀自动机)
Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 4901 Accepted: 2765 Description Once ...
- [poj1509]Glass Beads(最小表示法)
题目大意:求循环同构的字符串的最小字典序. 解题关键:最小表示法模板题. #include<cstdio> #include<cstring> #include<algo ...
- POJ 1509 Glass Beads 后缀自动机 模板 字符串的最小表示
http://poj.org/problem?id=1509 后缀自动机其实就是一个压缩储存空间时间(对节点重复利用)的储存所有一个字符串所有子串的trie树,如果想不起来长什么样子可以百度一下找个图 ...
- POJ 1509 Glass Beads
Description 求字符串的最小循环表示. Sol SAM. 把原串复制一遍,建出SAM,然后每次选最小的一个跑 \(len\) 次,这就是最小循环表示的最后一个节点,然后 \(x-len+1\ ...
- POJ 1635 树的最小表示法/HASH
题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. ...
- PKU 1509 Glass Beads (最小表示法)
题意:有一个环形字符串,让你找一个位置切一刀使得字符串字母序最小.输出这个位置. 思路:能够看成两个字符串比較.一个是从下标0開始(0~n-1),一个从下标1開始(1~n-1,0). 然后两个指针i= ...
随机推荐
- [LeetCode] 195. Tenth Line_Easy tag: Bash
Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...
- mybatis打印sql日志配置
<settings> <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGI ...
- python 打印输出至文件中, 'wt'读写文件方式,会把原文件内容清空
会把原文件内容清空,写最新的 文件必须以文本模式打开,如果文件是二进制模式的话,打印会出错
- 2017-2018-2 20165207 实验四《Android开发基础》实验报告
2017-2018-2 20165207 实验四<Android开发基础>实验报告 检查点1 安装测试Android Studio: 安装Android Studio 安装过程比较艰难,一 ...
- python3.4学习笔记(三) idle 清屏扩展插件
python3.4学习笔记(三) idle 清屏扩展插件python idle 清屏问题的解决,使用python idle都会遇到一个常见而又懊恼的问题——要怎么清屏?在stackoverflow看到 ...
- 计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根
#include<stdio.h> #include<math.h> int main() { // 待解方程数目 int n; scanf("%d", & ...
- 1、初始Java应用程序
Java Application程序,也称为Java应用程序,是可独立的应用程序.该类程序以main()方法作为入口,由独立的Java解释器加载执行. 下面的列子是一个简单的Java应用程序. imp ...
- VM三种网络连接方式
bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,和Linux下一个网卡 绑定两个不同地址类似,实际上是将网卡设置为混杂模式,从而达到侦听多个IP的能力. 在此种模式下,虚拟机内部的 ...
- wireshark不支持抓localhost/127.0.0.1的包解决方法
有些时候,测试网络应用时,为了开发方便,我们会在本机同时开启客户端和测试端,对于第三方的库来说,因为不能debug,可能需要通过抓包进行分析,今天用wireshark根据端口抓包的时候,发现怎么都下不 ...
- .net Core 中将原MVC中的 MvcHtmlString转换
public static IHtmlContent CustomLabelFor<TModel, TProperty>(this IHtmlHelper helper, Expressi ...