bzoj 2882: 工艺【SAM】
看上去比较SA,但是在学SAM所以就用SAM来做……
把串复制一遍接在后面,对这个新串求SAM(这里的儿子节点要用map转移),然后从根节点每次都向最小的转移走,这样走n次转移的串就是答案
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
const int N=1000005;
int n,a[N],fa[N],dis[N],la,cur=1,cnt=1;
map<int,int>ch[N];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void ins(int c,int id)
{la=cur,dis[cur=++cnt]=id;int p=la;for(;p&&!ch[p][c];p=fa[p])ch[p][c]=cur;if(!p)fa[cur]=1;else{int q=ch[p][c];if(dis[q]==dis[p]+1)fa[cur]=q;else{int nq=++cnt;dis[nq]=dis[p]+1;// memcpy(ch[nq],ch[q],sizeof(ch[nq]));for(map<int,int>::iterator it=ch[q].begin();it!=ch[q].end();it++)ch[nq][it->first]=it->second;fa[nq]=fa[q];fa[q]=fa[cur]=nq;for(;ch[p][c]==q;p=fa[p])ch[p][c]=nq;}}
}
int main()
{n=read();for(int i=1;i<=n;i++)a[i]=a[i+n]=read();for(int i=1;i<=2*n;i++)ins(a[i],i);for(int i=1,nw=1;i<=n;i++){printf("%d ",ch[nw].begin()->first);nw=ch[nw].begin()->second;}return 0;
}
转载于:https://www.cnblogs.com/lokiii/p/10000966.html
bzoj 2882: 工艺【SAM】相关推荐
- BZOJ 4892: [Tjoi2017]DNA(SA+RMQ / SAM)
Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的 性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够 ...
- BZOJ 1921: [Ctsc2010]珠宝商 点分治套SAM
题目链接 首先可以发现两种算法 一. 暴力处理 对"特征串"建SAM 枚举路径的一个端点,\(dfs\)另一个端点,同时维护在SAM上的位置. 每到一个位置会有SAM上对应节点的r ...
- [BZOJ]4180: 字符串计数 SAM+矩阵乘法+二分
Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C', ...
- 暑假集训 ---- 字符串2 (SAM专题)
P1368 工艺 把串插入 S A M SAM SAM 插两次,然后贪心找最小字典序即可 [AHOI2013]差异 两个串的最长公共后缀就是后缀自动机上 lca 的长度 于是把两个串反过来,对于每一个 ...
- 论逗逼的自我修养——BZOJ第一页计划
感觉都干了这么久BZOJ了,还没有上第一页有点对不起我的300块大洋,打算在WC前淦上第一页. upd 1. 2 : 以奇怪的姿势做完了cerc2014感觉感觉做了3天做了没几道不太水的题,今天又以刷 ...
- UOJ #395 BZOJ 5417 Luogu P4770 [NOI2018]你的名字 (后缀自动机、线段树合并)
NOI2019考前做NOI2018题.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=5417 (luogu) http ...
- BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析、启发式合并、线段树合并、主席树)...
标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) ...
- BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析)
标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) ...
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...
最新文章
- 设计模式 之美 -- 面向对象(C/C++分别实现)
- 图(1)——图的定义和基本概念
- XO Wave-数字音频编纂软件
- 图解Google Android内核编译教程
- luogu P1027 Car的旅行路线
- 对称加密-DES解密
- 选择湿度传感器注意的若干问题
- 2018年全球智能手机销售收入增至5220亿美元 但销量却下降了
- [Active Learning] Multi-Criteria-based Active Learning
- linux命令last格式,Linux last和lastlog命令:查看过去登陆的用户信息
- 关于IRR的一些总结
- 我的世界空岛生存服务器制作,《我的世界》空岛生存地图玩法 教你如何安全度过前期生存下去...
- 假设有长度为5的数组
- 一张照片让你的安卓手机崩溃
- matlab qua2d,matlab 几个关于GPS/INS和GPS/AHRS的程序 - 下载 - 搜珍网
- Google算法更新记录-你想了解的全在这
- 学神乔明达和他堪称神迹的学习履历
- Java 版 Prim 算法求最小生成树
- 基于SNMP的信息刺探扫描与防护策略
- Qt Linguist 介绍
热门文章
- python语言程序设计编程题_Python语言程序设计(测试练习题)
- 10000个科学难题书籍介绍
- Android学习之网上商城(上)
- 计算机系统设计原理当当,操作系统精髓与设计原理
- 基于MATLAB的图像压缩感知设计(含源文件)
- 信息安全工程师笔记-案例分析(三)
- Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析
- Qt工作笔记-以配置文件的方式动态获取Mysql数据库中的数据
- java编写一个程序_计算已知长和宽的长方形的周长,请教一下大佬们,我们java留了一个作业,编写程序,定义一个接口Comput,声明计算周长和面积的方法...
- php符号 set,PHP 符号大全