【题目链接】:http://www.lydsy.com/JudgeOnline/problem.php?id=1031

【题意】

【题解】

后缀数组模板题;
把整个字符串扩大一倍.
即长度乘2
然后搞出后缀数组;
然后顺序枚举i;
对于sa[i]< n的输出对应的s[sa[i]+n-1]就好了
后缀的含义是把后缀按照字典序从小到大排一下.
按照这个规则;
就能搞了;
必然是在前n个字符中就能比较出来;
所以及时后缀多了一些也没事.

【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x)typedef pair<int, int> pii;
typedef pair<LL, LL> pll;const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 1e5+100;char s[N * 2];
int sa[N * 2], wv[2][350005], tong[N * 2];bool cmp(int *tmp, int x, int y, int j)
{return tmp[x] == tmp[y] && tmp[x + j] == tmp[y + j];
}void getsa(int n, int m)
{int p = 0, *x = wv[0], *y = wv[1];rep1(i, 0, n - 1)++tong[x[i] = s[i]];rep1(i, 1, m - 1)tong[i] += tong[i - 1];rep2(i, n - 1, 0)sa[--tong[x[i]]] = i;for (int j = 1; p != n; j <<= 1, m = p){p = 0;rep1(i,n-j,n-1)y[p++] = i;rep1(i, 0, n - 1)if (sa[i] >= j)y[p++] = sa[i] - j;rep1(i, 0, m - 1)tong[i] = 0;rep1(i, 0, n - 1)++tong[x[y[i]]];rep1(i, 1, m - 1)tong[i] += tong[i - 1];rep2(i, n - 1, 0)sa[--tong[x[y[i]]]] = y[i];swap(x, y), p = 1, x[sa[0]] = 0;rep1(i, 1, n - 1)x[sa[i]] = cmp(y, sa[i - 1], sa[i], j) ? p - 1 : p++;}
}int main()
{//freopen("F:\\rush.txt", "r", stdin);int n;scanf("%s", s);n = strlen(s);rep1(i, 0, n - 1)s[i + n] = s[i];getsa(n << 1 | 1, 128);rep1(i, 1, n << 1)if (sa[i] < n)putchar(s[sa[i] + n - 1]);puts("");//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7626540.html

【BZOJ 1031】[JSOI2007]字符加密Cipher(后缀数组模板)相关推荐

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

    为什么我的后缀数组跑得这么慢... 把字符串复制一遍放在最后, 然后跑sa, 扫一遍就行了... --------------------------------------------------- ...

  2. bzoj 1031 [JSOI2007]字符加密Cipher 后缀数组

    题面 题目传送门 解法 后缀数组模板题吧-- 将字符串两倍,然后求一遍sa数组即可 时间复杂度:\(O(n\ log\ n)\) 代码 #include <bits/stdc++.h> # ...

  3. 后缀数组(bzoj 1031: [JSOI2007]字符加密Cipher)

    后缀数组主要功能: 长度为n的字符串总共有n个后缀,求这n个后缀的字典序 实现方法:倍增+基数排序,过程就是下面那张表 求log(n)次rank数组,每次的rank数组都可以通过上次的rank数组得出 ...

  4. 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组

    [BZOJ1031][JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的 ...

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=1031 很容易想到这就是将字符串复制到自己末尾然后后缀数组搞出sa然后按区间输出即可. 然后换了下模板 ...

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

    题目链接 两眼题.. 第一眼裸SA 第二眼要复制一倍再跑SA. 一遍过.. #include <cstdio> #include <cstring> #include < ...

  7. BZOJ1031: [JSOI2007]字符加密Cipher

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7882  Solved: 3425 [Subm ...

  8. [bzoj1031][JSOI2007]字符加密Cipher

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4175 Solved: 1694 [Submit ...

  9. 【Tyvj3500】【BZOJ1031】字符加密,后缀数组

    Time:2016.05.22 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 非常裸的题目了,连height数组都不用 把原串后面再接上一个原串,得到一个长度为原串两倍 ...

最新文章

  1. Spring Cloud一站式的微服务架构解决方案
  2. servlet的重定向错误
  3. Python中for循环搭配else的陷阱
  4. [蓝桥杯][2013年第四届真题]核桃的数量-枚举(水题)
  5. Java 跨平台运行机理:Dos 命令在桌面新建文件夹,并在其中编译、运行一段 Java 程序
  6. Nginx配置以及域名转发
  7. 排序字段设计_内容搜索排序表达式的最佳实践
  8. ORACLE 透明网关访问 MYSQL 表
  9. openStack Packages yum upgrade
  10. 数据结构之基于Java的二叉树实现
  11. 5 天 6 亿 3000 万数据泄露,怎么做才能跑赢骗子?
  12. 矩阵运算_Sophus库的使用
  13. HITB 2020:二进制漏洞挖掘仍是会议主流方向
  14. autocad2007二维图画法_CAD2007如何画平面图
  15. 高冷一字id_一字网名男生高冷霸气
  16. 多事之秋----为什么受伤又是华为
  17. canvas初识及其简单使用
  18. python plot如何保存图片_Matplotlib 保存图片、图画接口和显示中文的使用方法
  19. 什么是敏感型货物,被海关扣押之后如何处理?
  20. Java中正则Matcher类的matches()、lookAt()和find()的区别

热门文章

  1. ffmpeg系列-协议操作解析-AVIOContext,URLContext,URLProtocol,HTTPContext
  2. ITU-T Technical Paper: NP, QoS 和 QoE的框架以及它们的区别
  3. poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
  4. 用SpringMVC参数传递时,解决get请求时中文乱码的问题
  5. height、clientHeight、scrollHeight、offsetHeight区别
  6. 【codevs3119】高精度开根号(二分答案)
  7. Python入门--列表的创建
  8. 自然数幂与伯努利数,分数相加
  9. php网站采集器,PHP采网址(列表页处理)插件的开发方法
  10. 入侵检测技术-矛与盾