题目链接

思路

\(SAM\)练手题,将原串重复一遍插入到\(SAM\)中,然后贪心走长度为n的一个路径即可。

不用担心会直接走到终点,根据\(SAM\)的构造方式可以发现会先走到前面的路径。

代码

  1. /*
  2. * @Author: wxyww
  3. * @Date: 2019-07-11 11:09:25
  4. * @Last Modified time: 2019-07-11 11:20:42
  5. */
  6. #include<cstdio>
  7. #include<map>
  8. #include<iostream>
  9. #include<cstdlib>
  10. #include<cstring>
  11. #include<algorithm>
  12. #include<queue>
  13. #include<vector>
  14. #include<ctime>
  15. using namespace std;
  16. typedef long long ll;
  17. const int N = 600000 + 100;
  18. ll read() {
  19. ll x=0,f=1;char c=getchar();
  20. while(c<'0'||c>'9') {
  21. if(c=='-') f=-1;
  22. c=getchar();
  23. }
  24. while(c>='0'&&c<='9') {
  25. x=x*10+c-'0';
  26. c=getchar();
  27. }
  28. return x*f;
  29. }
  30. struct node {
  31. int len,fa;
  32. map<int,int>ch;
  33. }SAM[N << 1];
  34. int lst = 1,tot = 1;
  35. void add(int c) {
  36. int cur = ++tot,p = lst;
  37. SAM[cur].len = SAM[p].len + 1;
  38. while(p && !SAM[p].ch[c]) {
  39. SAM[p].ch[c] = cur;
  40. p = SAM[p].fa;
  41. }
  42. if(!p) SAM[cur].fa = 1;
  43. else {
  44. int q = SAM[p].ch[c];
  45. if(SAM[q].len == SAM[p].len + 1) SAM[cur].fa = q;
  46. else {
  47. int clone = ++tot;
  48. SAM[clone] = SAM[q];
  49. SAM[clone].len = SAM[p].len + 1;
  50. while(p && SAM[p].ch[c] == q) {
  51. SAM[p].ch[c] = clone;
  52. p = SAM[p].fa;
  53. }
  54. SAM[q].fa = SAM[cur].fa = clone;
  55. }
  56. }
  57. lst = cur;
  58. }
  59. int a[N];
  60. int main() {
  61. int n = read();
  62. for(int i = 1;i <= n;++i) a[i] = read();
  63. for(int i = 1;i <= n;++i) add(a[i]);
  64. for(int i = 1;i <= n;++i) add(a[i]);
  65. int p = 1;
  66. for(int i = 1;i <= n;++i) {
  67. printf("%d ",SAM[p].ch.begin() -> first);
  68. p = SAM[p].ch.begin() -> second;
  69. }
  70. return 0;
  71. }

luogu1368 工艺的更多相关文章

  1. BZOJ 2882: 工艺

    2882: 工艺 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 599  Solved: 268[Submit][Status][Discuss] D ...

  2. PCB表面处理工艺

    PCB表面处理最基本的目的是保证良好的可焊性或电性能.由于自然界的铜在空气中倾向于以氧化物的形式存在,不大可能长期保持为原铜,因此需要对铜进行其他处理. 1.热风整平(喷锡) 热风整平又名热风焊料整平 ...

  3. 注塑成型工艺知识大全(Injection Molding)

    注塑成型,广泛用于热塑性塑料产品的制造工艺 工艺成本:模具费用(高),单件费用(低) 典型产品:汽车塑料部件,消费电子产品塑料外壳等 产量适合:只适合大批量生产 质量:极高的表面精确度,同一批次的产品 ...

  4. PCB工艺镀金(电金)和沉金(化金)的区别

    1.镀金和沉金的别名分别是什么?   镀金:硬金,电金(镀金也就是电金) 沉金:软金,化金 (沉金也就是化金) 2.别名的由来:  镀金:通过电镀的方式,使金粒子附着到pcb板上,所以叫电金,因为附着 ...

  5. 钣金的折弯成型工艺(Press Braking)

    钣金的折弯成型:金属板材的弯曲和成型是在弯板机上进行的,将要成型的板材放置在弯板机上,用升降杠杆将制动片提起,工件滑动到适当的位置,然后将制动片降低到要成型的板材上,通过对弯板机上的弯曲杠杆施力而实现 ...

  6. 一张图让你看懂锻压、CNC、压铸、冲压四类工艺!

    (锻压+CNC+阳极.CNC+阳极.压铸+阳极.冲压+阳极手机外壳比较) 上图为一张雷达图,该图比较直观形象地描述了4大手机外壳工艺在6个维度(加工成本.CNC用量.加工周期.成品率.可设计性.外观质 ...

  7. 手机金属外壳加工工艺:铸造、锻造、冲压、CNC

    现如今金属手机成为行业的热点,在消费电子产品中应用越来越广,本文详细介绍几种金属加工工艺及相关产品应用. 1.CNC+阳极:iPhone 5/6, HTC M7 2.锻造+CNC:华为P8,HTC M ...

  8. 从iPhone4、iPhone5、iPhone6看手机外壳加工工艺进化史

    从iPhone4.iPhone5到iPhone6,苹果为我们推出了一代又一代新产品,让我们享受到最新的科技产品.每次不只是配置上的改变,苹果在工艺上也不断改变.下面就阐述一下我对这几款手机在设计和制造 ...

  9. BZOJ2882: 工艺

    题解: 裸的字符串最小表示... 可以戳这里:http://www.cnblogs.com/ACAC/archive/2010/05/23/1742349.html 这里说一下为什么a[i+k]> ...

随机推荐

  1. Python网络编程基础 struct模块 解决黏包问题 FTP

    struct模块 解决黏包问题 FTP

  2. Tomcat中session复制技术

    一.准备三台机器主机的服务都正常,nginx与Tomcat构建负载均衡 主机名     IP地址 nginx       192.168.200.111 Tomcat1  192.168.200.11 ...

  3. 乘积量化(Product Quantization)

    乘积量化 1.简介 乘积量化(PQ)算法是和VLAD算法是由法国INRIA实验室一同提出来的,为的是加快图像的检索速度,所以它是一种检索算法,在矢量量化(Vector Quantization,VQ) ...

  4. js判断浏览器是否安装或启用了flash的方法总结

    目录 # js判断浏览器是否安装或启用了flash的方法 # chrome浏览器启用flash插件的方法 # 参考 # js判断浏览器是否安装或启用了flash的方法 在传统浏览器,可以使用windo ...

  5. TypeScript + Webpack 4 开发环境搭建(转)

    前段时间接触到 Microsoft 的 Microsoft.AspNetCore.SpaTemplates 模板,生成的项目使用的默认语言是 TypeScript,虽然以前在此之前并没有用过TypeS ...

  6. 1+x 证书 Web 前端开发中级理论考试(试卷 6 )

    1+x 证书 Web 前端开发中级理论考试(试卷 6 ) 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/ ...

  7. MySQL for OPS 10:MyCAT 分布式架构

    写在前面的话 在学习的索引的时候,有提到,当数据表数据达到 800W 的时候,索引的性能就开始逐步下降.对于一个公司而言,主要业务数据表达到 1000W 都很容易.同时这张表一般都是业务常用的表,操作 ...

  8. 性能篇系列—stream详解

    Stream API Java 8集合中的Stream相当于高级版的Iterator Stream API通过Lambda表达式对集合进行各种非常便利高效的聚合操作,或者大批量数据操作 Stream的 ...

  9. 高强度学习训练第十天总结:Class文件

    今天这Class文件看的我一脸懵圈.有种当初学PE时候的感觉了. 类文件结构 如果计算机的CPU指令集只有X86一种,操作系统也只有windows,那也许Java语言就不会出现.Java在诞生之初就提 ...

  10. JS基础语法---函数练习part1---5个练习

    练习1:求两个数字的和:获取任意的两个数字的和 function getSum(x, y) { return x + y; } console.log(getSum(10, 20)); 练习2:求1- ...