【题目链接】: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;
}

【BZOJ 1031】[JSOI2007]字符加密Cipher(后缀数组模板)的更多相关文章

  1. BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题

    BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题 将字符串复制一遍接在原串后面,然后后缀排序即可. #include <cmath> #include &l ...

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

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

  3. BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组教程

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

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

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6014  Solved: 2503[Submit ...

  5. bzoj 1031: [JSOI2007]字符加密Cipher 後綴數組模板題

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3157  Solved: 1233[Submit ...

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

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

  7. 1031. [JSOI2007]字符加密【后缀数组】

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

  8. bzoj 1031 [JSOI2007]字符加密Cipher

    求出来后缀数组的rank就行了,不会可以去看集训队论文. #include<iostream> #include<cstdio> #include<cstring> ...

  9. bzoj 1031: [JSOI2007]字符加密Cipher【后缀数组】

    算是SA的裸题了 把串复制一遍接在原串后面,然后求SA,然后按着SA的顺序输出尾字符即可 #include<iostream> #include<cstdio> #includ ...

随机推荐

  1. 三个水杯(BFS)

    三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 给出三个水杯.大小不一,而且仅仅有最大的水杯的水是装满的,其余两个为空杯子. 三个水杯之间相互倒水,而且水杯 ...

  2. HttpClient FormUrlEncodedContent System.UriFormatException: 无效的 URI: URI 字符串太长问题解决方案

    1.问题描述: HttpClint 使用FormUrlEncodedContent 调用接口时 报错 System.UriFormatException: 无效的 URI: URI 字符串太长: 2. ...

  3. Altium Designer如何创建类,如何修改线宽

    如果线宽还是没有改变,就是因为,有一个默认的class,它的规则优先级要高于PWR

  4. 硬件——STM32 , 软件框架

    单片机应用程序的框架大概有三种: 1,简单的前后台顺序执行程序. 2,时间片轮询法. 3,应用操作系统. 下面我们主要来讲解时间片轮询法: 在这里我们先介绍一下定时器的复用功能.就是使用1个定时器,可 ...

  5. Javascript和jquery事件--鼠标事件的小结

    1.鼠标事件的主要事件应该是mouseup, mousedown, mousewheel, mousemove, mouseover, moveout. <1>其中mouseup和mous ...

  6. (转)oracle常用的数据字典

    一.oracle数据字典主要由以下几种视图构成: .user视图 以user_为前缀,用来记录用户对象的信息 .all视图 以all_为前缀,用来记录用户对象的信息及被授权访问的对象信息 .dba视图 ...

  7. 【Educational Codeforces Round 31 A】Book Reading

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 水模拟 [代码] #include <bits/stdc++.h> using namespace std; const ...

  8. 写PPT的先扬后抑的思路

    近期给一个客户做IT战略规划. 基本结束了,客户要求写点有高度的东西.我想也是,尽管眼下的PPT也触及到战略和行业的问题,可是没有总结出来.于是就挖空心思,琢磨了三天.写了4页PPT.改动了几遍.还算 ...

  9. thinkphp模拟请求和参数绑定

    thinkphp模拟请求和参数绑定 一.总结 1.网页传过来的参数是可以修改的:get或者post等方式 传过来的参数是可以修改的  dump($request->get(['id'=>2 ...

  10. Android 用SQLite 使用 CursorLoader 中的数据填充列表视图

    我做了简单的测试应用程序基于此示例.有一个按钮,插入到数据库和列表视图的数据.都是在 MainActivity 中.在原来的代码是restartLoader() 仅从调用 onResume() ,但它 ...