题目链接

两眼题。。

第一眼裸SA

第二眼要复制一倍再跑SA。

一遍过。。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int MAXN = 1000010;
  6. int sa[MAXN], x[MAXN], c[MAXN], y[MAXN], n, m = 122, q[MAXN], out[MAXN];
  7. char s[MAXN];
  8. int cmp(const int a, const int b){
  9. return x[a] < x[b];
  10. }
  11. int main(){
  12. scanf("%s", s + 1);
  13. n = strlen(s + 1);
  14. for(int i = 1; i <= n; ++i) s[i + n] = s[i];
  15. n <<= 1;
  16. for(int i = 1; i <= n; ++i) ++c[x[i] = s[i]];
  17. for(int i = 2; i <= m; ++i) c[i] += c[i - 1];
  18. for(int i = 1; i <= n; ++i) sa[c[x[i]]--] = i;
  19. for(int k = 1; k <= n; k <<= 1){
  20. int num = 0;
  21. for(int i = n; i >= n - k + 1; --i) y[++num] = i;
  22. for(int i = 1; i <= n; ++i) if(sa[i] > k) y[++num] = sa[i] - k;
  23. for(int i = 1; i <= m; ++i) c[i] = 0;
  24. for(int i = 1; i <= n; ++i) ++c[x[i]];
  25. for(int i = 2; i <= m; ++i) c[i] += c[i - 1];
  26. for(int i = n; i; --i) sa[c[x[y[i]]]--] = y[i];
  27. memcpy(y, x, sizeof x);
  28. x[sa[1]] = 1; num = 1;
  29. for(int i = 2; i <= n; ++i)
  30. x[sa[i]] = (y[sa[i]] == y[sa[i - 1]] && y[sa[i] + k] == y[sa[i - 1] + k]) ? num : ++num;
  31. if(num == n) break;
  32. m = num;
  33. }
  34. n >>= 1;
  35. for(int i = 1; i <= n; ++i) q[i] = i;
  36. sort(q + 1, q + n + 1, cmp);
  37. for(int i = 1; i <= n; ++i)
  38. printf("%c", s[q[i] + n - 1]);
  39. return 0;
  40. }

【洛谷 P4051】 [JSOI2007]字符加密(后缀数组)的更多相关文章

  1. 洛谷P4051 [JSOI2007]字符加密 后缀数组

    题目链接:https://www.luogu.org/problemnew/show/P4051 思路:我们联想求后缀数组sa的过程,发现我们在求y数组的时候(第二关键字,下标为第二关键字的排位,值为 ...

  2. 洛谷P4051 [JSOI2007]字符加密

    题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...

  3. [JSOI2007]字符加密 后缀数组

    题面:洛谷 题解: 我们考虑,如果可以将环上每个长度为len的串都提取出来,再做个排序,那这题我们就做出来了! 但是提取$n^2$,怎么办? 考虑破环成链,再扩充为原来的2倍. 然后直接做后缀排序,把 ...

  4. 洛谷4051 JSOI2007 字符加密(SA)

    真是一道良好的SA模板题 首先,由于涉及到从左边移动到右边这个过程,我们不妨直接把字符串复制一遍,接在后面. 然后直接构造后缀数组,按排名从小到大,枚举所有的位置,如果这个后缀的起始点是在原串中的,那 ...

  5. BZOJ.1031.[JSOI2007]字符加密(后缀数组)

    题目链接 环可以拆成链:对字符串排序能想到后缀数组. 完了.输出时忽略长度不足n的串,输出s[sa[i]+n-1],即排名为i的字符串的末尾. //4140kb 744ms #include < ...

  6. 洛谷 4051 [JSOI2007]字符加密(后缀数组)

    题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...

  7. P4051 [JSOI2007]字符加密 解题报告

    P4051 [JSOI2007]字符加密 题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不 ...

  8. LG4051/BZOJ1031 「JSOI2007」字符加密 后缀数组

    问题描述 BZOJ1031 LG4051 题解 发现这是一个环,根据经验,破环为链,于是字符环变为了字符串 之后对这个复制之后的字符串求后缀数组. $len$代表原字符串长度,代表复制后的字符串长度 ...

  9. 洛谷P3763 [Tjoi2017]DNA 【后缀数组】

    题目链接 洛谷P3763 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ #include<algorithm> #include<iostream> #include< ...

  10. luogu P4051 [JSOI2007]字符加密

    前言 其实就是个后缀数组模板题 可还是有几个的地方不太明白 思路 先将子串复制一遍,组成长度为2*n的子串 给出的子串一定会在前n个后缀 而且后面的优先级不会影响前面的相对大小 然后求得sa输出就好 ...

随机推荐

  1. “小葵日记”API接口文档

    "小葵日记"项目API接口文档 时间:2017/10/31 (1)用户登录[待完成] POST:127.0.0.1/index/user/login data 数据别称 数据名 数 ...

  2. lintcode-160-寻找旋转排序数组中的最小值 II

    160-寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在 ...

  3. iOS- 简单说说iOS移动客户端SQLite3的基本使用

    1.为什么要使用SQLite3? •大量数据需要存储 •管理数据,存储数据   SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)     2.SQLite3的几种存储类型   a.NU ...

  4. iOS-开发过程中应用间跳转问题

  5. TCP系列30—窗口管理&流控—4、Cork算法

    一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...

  6. 团队组队&灰化肥挥发会发黑

    1. 队伍展示 (1. 队名: 灰化肥挥发会发黑 (2. 队员风采 苏叶潇(队长) 201521123114 与众不同,擅长软件测试,对编程望而却步,希望成为测试人员. 宣言:不求最好,只求更好. 李 ...

  7. tomcat 相关

    servlet.xml 文件: 1 . 修改端口号,找到如下标签,port 属性就是端口号,修改之后重启服务器即可, <Connector connectionTimeout="200 ...

  8. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  9. java直接访问JNDI工具代码

    import java.sql.*; import java.util.*; import javax.naming.*; import javax.sql.DataSource; public cl ...

  10. Java序列简单使用

    package javatest; import java.io.*; public class SerializableTest implements Serializable { public s ...