luogu1368 工艺
思路
\(SAM\)练手题,将原串重复一遍插入到\(SAM\)中,然后贪心走长度为n的一个路径即可。
不用担心会直接走到终点,根据\(SAM\)的构造方式可以发现会先走到前面的路径。
代码
/*
* @Author: wxyww
* @Date: 2019-07-11 11:09:25
* @Last Modified time: 2019-07-11 11:20:42
*/
#include<cstdio>
#include<map>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 600000 + 100;
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
struct node {
int len,fa;
map<int,int>ch;
}SAM[N << 1];
int lst = 1,tot = 1;
void add(int c) {
int cur = ++tot,p = lst;
SAM[cur].len = SAM[p].len + 1;
while(p && !SAM[p].ch[c]) {
SAM[p].ch[c] = cur;
p = SAM[p].fa;
}
if(!p) SAM[cur].fa = 1;
else {
int q = SAM[p].ch[c];
if(SAM[q].len == SAM[p].len + 1) SAM[cur].fa = q;
else {
int clone = ++tot;
SAM[clone] = SAM[q];
SAM[clone].len = SAM[p].len + 1;
while(p && SAM[p].ch[c] == q) {
SAM[p].ch[c] = clone;
p = SAM[p].fa;
}
SAM[q].fa = SAM[cur].fa = clone;
}
}
lst = cur;
}
int a[N];
int main() {
int n = read();
for(int i = 1;i <= n;++i) a[i] = read();
for(int i = 1;i <= n;++i) add(a[i]);
for(int i = 1;i <= n;++i) add(a[i]);
int p = 1;
for(int i = 1;i <= n;++i) {
printf("%d ",SAM[p].ch.begin() -> first);
p = SAM[p].ch.begin() -> second;
}
return 0;
}
luogu1368 工艺的更多相关文章
- BZOJ 2882: 工艺
2882: 工艺 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 599 Solved: 268[Submit][Status][Discuss] D ...
- PCB表面处理工艺
PCB表面处理最基本的目的是保证良好的可焊性或电性能.由于自然界的铜在空气中倾向于以氧化物的形式存在,不大可能长期保持为原铜,因此需要对铜进行其他处理. 1.热风整平(喷锡) 热风整平又名热风焊料整平 ...
- 注塑成型工艺知识大全(Injection Molding)
注塑成型,广泛用于热塑性塑料产品的制造工艺 工艺成本:模具费用(高),单件费用(低) 典型产品:汽车塑料部件,消费电子产品塑料外壳等 产量适合:只适合大批量生产 质量:极高的表面精确度,同一批次的产品 ...
- PCB工艺镀金(电金)和沉金(化金)的区别
1.镀金和沉金的别名分别是什么? 镀金:硬金,电金(镀金也就是电金) 沉金:软金,化金 (沉金也就是化金) 2.别名的由来: 镀金:通过电镀的方式,使金粒子附着到pcb板上,所以叫电金,因为附着 ...
- 钣金的折弯成型工艺(Press Braking)
钣金的折弯成型:金属板材的弯曲和成型是在弯板机上进行的,将要成型的板材放置在弯板机上,用升降杠杆将制动片提起,工件滑动到适当的位置,然后将制动片降低到要成型的板材上,通过对弯板机上的弯曲杠杆施力而实现 ...
- 一张图让你看懂锻压、CNC、压铸、冲压四类工艺!
(锻压+CNC+阳极.CNC+阳极.压铸+阳极.冲压+阳极手机外壳比较) 上图为一张雷达图,该图比较直观形象地描述了4大手机外壳工艺在6个维度(加工成本.CNC用量.加工周期.成品率.可设计性.外观质 ...
- 手机金属外壳加工工艺:铸造、锻造、冲压、CNC
现如今金属手机成为行业的热点,在消费电子产品中应用越来越广,本文详细介绍几种金属加工工艺及相关产品应用. 1.CNC+阳极:iPhone 5/6, HTC M7 2.锻造+CNC:华为P8,HTC M ...
- 从iPhone4、iPhone5、iPhone6看手机外壳加工工艺进化史
从iPhone4.iPhone5到iPhone6,苹果为我们推出了一代又一代新产品,让我们享受到最新的科技产品.每次不只是配置上的改变,苹果在工艺上也不断改变.下面就阐述一下我对这几款手机在设计和制造 ...
- BZOJ2882: 工艺
题解: 裸的字符串最小表示... 可以戳这里:http://www.cnblogs.com/ACAC/archive/2010/05/23/1742349.html 这里说一下为什么a[i+k]> ...
随机推荐
- Python网络编程基础 struct模块 解决黏包问题 FTP
struct模块 解决黏包问题 FTP
- Tomcat中session复制技术
一.准备三台机器主机的服务都正常,nginx与Tomcat构建负载均衡 主机名 IP地址 nginx 192.168.200.111 Tomcat1 192.168.200.11 ...
- 乘积量化(Product Quantization)
乘积量化 1.简介 乘积量化(PQ)算法是和VLAD算法是由法国INRIA实验室一同提出来的,为的是加快图像的检索速度,所以它是一种检索算法,在矢量量化(Vector Quantization,VQ) ...
- js判断浏览器是否安装或启用了flash的方法总结
目录 # js判断浏览器是否安装或启用了flash的方法 # chrome浏览器启用flash插件的方法 # 参考 # js判断浏览器是否安装或启用了flash的方法 在传统浏览器,可以使用windo ...
- TypeScript + Webpack 4 开发环境搭建(转)
前段时间接触到 Microsoft 的 Microsoft.AspNetCore.SpaTemplates 模板,生成的项目使用的默认语言是 TypeScript,虽然以前在此之前并没有用过TypeS ...
- 1+x 证书 Web 前端开发中级理论考试(试卷 6 )
1+x 证书 Web 前端开发中级理论考试(试卷 6 ) 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/ ...
- MySQL for OPS 10:MyCAT 分布式架构
写在前面的话 在学习的索引的时候,有提到,当数据表数据达到 800W 的时候,索引的性能就开始逐步下降.对于一个公司而言,主要业务数据表达到 1000W 都很容易.同时这张表一般都是业务常用的表,操作 ...
- 性能篇系列—stream详解
Stream API Java 8集合中的Stream相当于高级版的Iterator Stream API通过Lambda表达式对集合进行各种非常便利高效的聚合操作,或者大批量数据操作 Stream的 ...
- 高强度学习训练第十天总结:Class文件
今天这Class文件看的我一脸懵圈.有种当初学PE时候的感觉了. 类文件结构 如果计算机的CPU指令集只有X86一种,操作系统也只有windows,那也许Java语言就不会出现.Java在诞生之初就提 ...
- JS基础语法---函数练习part1---5个练习
练习1:求两个数字的和:获取任意的两个数字的和 function getSum(x, y) { return x + y; } console.log(getSum(10, 20)); 练习2:求1- ...