洛谷P4051 [JSOI2007]字符加密
题目描述
喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法。
例如‘JSOI07’,可以读作: JSOI07 SOI07J OI07JS I07JSO 07JSOI 7JSOI0 把它们按照字符串的大小排序: 07JSOI 7JSOI0 I07JSO JSOI07 OI07JS SOI07J 读出最后一列字符: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]字符加密的更多相关文章
- 洛谷P4051 [JSOI2007]字符加密 后缀数组
题目链接:https://www.luogu.org/problemnew/show/P4051 思路:我们联想求后缀数组sa的过程,发现我们在求y数组的时候(第二关键字,下标为第二关键字的排位,值为 ...
- 洛谷 4051 [JSOI2007]字符加密(后缀数组)
题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...
- 洛谷4051 JSOI2007 字符加密(SA)
真是一道良好的SA模板题 首先,由于涉及到从左边移动到右边这个过程,我们不妨直接把字符串复制一遍,接在后面. 然后直接构造后缀数组,按排名从小到大,枚举所有的位置,如果这个后缀的起始点是在原串中的,那 ...
- P4051 [JSOI2007]字符加密 解题报告
P4051 [JSOI2007]字符加密 题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不 ...
- luogu P4051 [JSOI2007]字符加密
前言 其实就是个后缀数组模板题 可还是有几个的地方不太明白 思路 先将子串复制一遍,组成长度为2*n的子串 给出的子串一定会在前n个后缀 而且后面的优先级不会影响前面的相对大小 然后求得sa输出就好 ...
- p4051 [JSOI2007]字符加密
传送门 分析 将字符串复制一遍然后直接求sa即可 代码 #include<iostream> #include<cstdio> #include<cstring> ...
- BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6014 Solved: 2503[Submit ...
- bzoj 1031: [JSOI2007]字符加密Cipher 後綴數組模板題
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3157 Solved: 1233[Submit ...
- 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组
[BZOJ1031][JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的 ...
随机推荐
- Java基础学习总结(30)——Java 内存溢出问题总结
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...
- 这两道题目很相似 最优还钱方式 & 除法推导
http://www.cnblogs.com/grandyang/p/6108158.html http://www.cnblogs.com/grandyang/p/5880133.html 都是根据 ...
- ShopEx文章页添加上一篇下一篇功能
在全部的文章页中,会常常发现都会有这么一个功能.能引导用户去查看上一篇文章或下一篇文章,而在ShopEx中,我DEZEND了一下文章模型.并没有找到上一篇这种函数功能,因此,这就须要我们手动在相应的文 ...
- Maven配置Spring+SpringMVC+MyBatis(3.2.2)Pom 以及 IntelliJ IDEA 怎样打开依赖视图
Maven配置Spring+SpringMVC+MyBatis(3.2.2)Pom 配置原则: 利用依赖,将所需的jar包加载到project中. 先依赖主要jar包 Spring + Spring ...
- HTML5 界面元素 Canvas 參考手冊
HTML5 界面元素 Canvas 參考手冊 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协 ...
- 大海教你学手游2015CocosLua第一季_00课程介绍
话说大盘从5100直掉到3500点,千仅仅股票跌幅超过20%,跌跌不休.散户.证监会.做空机构開始斗气地主来了: 散户:叫地主 空头:抢地主,3分 证监会:pass 空头:压死 证监会:不要 散户:不 ...
- less04 运算符、命名空间
less //.wp{ // margin: 0 auto; // background: forestgreen; // width: 450px + 450; //有一个有单位就可以 // hei ...
- angularjs $http 服务
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- DBCC-->Database Console Commands
https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/database-console-commands DBCC ...
- 手机表单验证插件mvalidate的使用
使用 1.引入js和css <script type="text/javascript" src="../script/jquery-mvalidate.js&qu ...