题目描述

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

例如‘JSOI07’,可以读作: JSOI07 SOI07J OI07JS I07JSO 07JSOI 7JSOI0 把它们按照字符串的大小排序: 07JSOI 7JSOI0 I07JSO JSOI07 OI07JS SOI07J 读出最后一列字符:I0O7SJ,就是加密后的字符串(其实这个加密手段实在很容易破解,鉴于这是突然想出来的,那就^^)。 但是,如果想加密的字符串实在太长,你能写一个程序完成这个任务吗?

输入输出格式

输入格式:

输入文件包含一行,欲加密的字符串。注意字符串的内容不一定是字母、数字,也可以是符号等。

输出格式:

输出一行,为加密后的字符串。

输入输出样例

输入样例#1: 复制

JSOI07
输出样例#1: 复制

I0O7SJ

说明

对于40%的数据字符串的长度不超过10000。

对于100%的数据字符串的长度不超过100000。

很明显是后缀数组

一开始在纠结各个后缀的长度不同会不会影响到答案

后来想了一下不会。

因为我们所要求的后缀的前缀的长度都是相同的。

所以长度并不会影响到最终结果

然后愉快的背上模板就好啦

开始的时候按照套路把字符串复制一遍

// luogu-judger-enable-o2
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=1e6+;
int sa[MAXN],tax[MAXN],rak[MAXN],tp[MAXN],a[MAXN],Height[MAXN],N,M;
char s[MAXN];
void Qsort()
{
for(int i=;i<=M;i++) tax[i]=;
for(int i=;i<=N;i++) tax[rak[i]]++;
for(int i=;i<=M;i++) tax[i]+=tax[i-];
for(int i=N;i>=;i--) sa[ tax[rak[tp[i]]]-- ]=tp[i];
}
void Ssort()
{
M=;
for(int i=;i<=N;i++) rak[i]=a[i],tp[i]=i;Qsort();
for(int w=,p=; p<N ; M=p,w<<=)
{
p=;
for(int i=;i<=w;i++) tp[++p]=N-w+i;
for(int i=;i<=N;i++) if(sa[i]>w) tp[++p]=sa[i]-w;
Qsort();swap(rak,tp);rak[sa[]]=p=;
for(int i=;i<=N;i++)
rak[sa[i]]=(tp[sa[i-]]==tp[sa[i]]&&tp[sa[i-]+w]==tp[sa[i]+w])?p:++p;
}
for(int i=;i<=N;i++)
if(sa[i]+N/<=N)
printf("%c",(char)a[sa[i]+N/-]);
}
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
scanf("%s",s);
N=strlen(s);
for(int i=;i<N;i++) a[i+]=s[i],a[i+N+]=s[i];N=N*;
Ssort();
}

洛谷P4051 [JSOI2007]字符加密的更多相关文章

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

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

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

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

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

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

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

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

  5. luogu P4051 [JSOI2007]字符加密

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

  6. p4051 [JSOI2007]字符加密

    传送门 分析 将字符串复制一遍然后直接求sa即可 代码 #include<iostream> #include<cstdio> #include<cstring> ...

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

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

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

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

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

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

随机推荐

  1. python基础6(函数 Ⅰ)

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段 定义 def function_name(args...): function_body #例子 def print_somethin ...

  2. 嵌入式(C)笔试题

    1 读程序段,回答问题 (a) int main(int argc,char *argv[]) { int c=9,d=0; c=c++%5; d=c; printf("d=%d\n&quo ...

  3. 配置oh-my-zsh

    1. 当使用zsh进入庞大的git工程目录下时,会发生cd命令很慢的情况 可以把~/.oh-my-zsh/lib/git.zsh里面的git_prompt_info函数替换为 function git ...

  4. 洛谷 P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

  5. TCO14 1B L3: EagleInZoo, dp,tree

    题目:http://community.topcoder.com/stat?c=problem_statement&pm=13117&rd=15950 看到树,又是与节点有关,通常是d ...

  6. POJ 1012 Joseph(打表题)

    题意:约瑟夫环的变形.要求寻找到一个杀人循环节m使后半节的坏人先被所有杀光. 直接链表模拟出结果,再打表即可: 代码:(凝视的是打表码) #include<iostream> #inclu ...

  7. less06 引入(importing)

    main.less @wp:960px; .colorsss{ color: darkgreen; } index.css .color{ color: #ff6600; } style.less / ...

  8. 51nod-1296: 有限制的排列

    [传送门:51nod-1296] 简要题意: 有一个集合,集合中的数为1到n 给出a限制条件,a[i]表示第a[i]位置的数要比相邻位置的数要小 给出b限制条件,b[i]表示第b[i]位置的数要比相邻 ...

  9. Find or Query Data with C# Driver

    https://docs.mongodb.com/getting-started/csharp/query/ Overview You can use the Find and FindAsync m ...

  10. 30.algorithm排序小结

    如果容器中是类,如果要调用sort则需要重载操作符 "<" 包含头文件 #define _CRT_SECURE_NO_WARNINGS #include <vector ...