1031: [JSOI2007]字符加密Cipher - BZOJ
Description
喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法。例如下图,可以读作: JSOI07 SOI07J OI07JS I07JSO 07JSOI 7JSOI0 把它们按照字符串的大小排序: 07JSOI 7JSOI0 I07JSO JSOI07 OI07JS SOI07J 读出最后一列字符:I0O7SJ,就是加密后的字符串(其实这个加密手段实在很容易破解,鉴于这是突然想出来的,那就^^)。但是,如果想加密的字符串实在太长,你能写一个程序完成这个任务吗?
Input
输入文件包含一行,欲加密的字符串。注意字符串的内容不一定是字母、数字,也可以是符号等。
Output
输出一行,为加密后的字符串。
Sample Input
JSOI07
Sample Output
I0O7SJ
数据规模
对于40%的数据字符串的长度不超过10000。
对于100%的数据字符串的长度不超过100000。
裸的后缀数组,一开始想的是后缀自动机(囧,建好自动机后按字典序dfs遍历长度为len的,直接超时和爆内存)
const
maxn=;
var
sa,x,y,c:array[..maxn]of longint;
s:ansistring;
n:longint; procedure init;
var
i,k:longint;
begin
readln(s);
s:=s+s;
n:=length(s);
for i:= to n do
begin
y[i]:=ord(s[i]);
x[i]:=y[i];
end;
for i:= to n do
inc(c[y[i]]);
for i:= to do
inc(c[i],c[i-]);
for i:= to n do
begin
sa[c[y[i]]]:=i;
dec(c[y[i]]);
end;
x[sa[]]:=;
k:=;
for i:= to n do
begin
if y[sa[i]]<>y[sa[i-]] then inc(k);
x[sa[i]]:=k;
end;
end; procedure work;
var
p,i,k:longint;
begin
p:=;
while p<n do
begin
for i:= to n-p do
y[i]:=x[i+p];
for i:=n-p+ to n do
y[i]:=;
for i:= to n do
c[i]:=;
for i:= to n do
inc(c[y[i]]);
for i:= to n do
inc(c[i],c[i-]);
for i:= to n do
begin
sa[c[y[i]]]:=i;
dec(c[y[i]]);
end;
for i:= to n do
c[i]:=;
for i:= to n do
inc(c[x[i]]);
for i:= to n do
inc(c[i],c[i-]);
for i:=n downto do
begin
y[sa[i]]:=c[x[sa[i]]];
dec(c[x[sa[i]]]);
end;
for i:= to n do
sa[y[i]]:=i;
y[sa[]]:=;
k:=;
for i:= to n do
begin
if (x[sa[i]]<>x[sa[i-]]) or (x[sa[i]+p]<>x[sa[i-]+p]) then inc(k);
y[sa[i]]:=k;
end;
x:=y;
p:=p<<;
end;
for i:= to n do
sa[x[i]]:=i;
for i:= to n do
if sa[i]<=n>> then write(s[sa[i]+n>>-]);
end; begin
init;
work;
end.
1031: [JSOI2007]字符加密Cipher - BZOJ的更多相关文章
- BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题
		BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题 将字符串复制一遍接在原串后面,然后后缀排序即可. #include <cmath> #include &l ... 
- 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 ... 
- BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组教程
		1031: [JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一 ... 
- 1031: [JSOI2007]字符加密Cipher
		1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7338 Solved: 3182[Submit ... 
- 后缀数组     1031: [JSOI2007]字符加密Cipher
		/*1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4926 Solved: 2020[Submit ... 
- 【BZOJ】1031: [JSOI2007]字符加密Cipher(后缀数组)
		http://www.lydsy.com/JudgeOnline/problem.php?id=1031 很容易想到这就是将字符串复制到自己末尾然后后缀数组搞出sa然后按区间输出即可. 然后换了下模板 ... 
- bzoj 1031 [JSOI2007]字符加密Cipher 后缀数组模板
		题目链接 题目描述 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作: ... 
- bzoj 1031: [JSOI2007]字符加密Cipher【后缀数组】
		算是SA的裸题了 把串复制一遍接在原串后面,然后求SA,然后按着SA的顺序输出尾字符即可 #include<iostream> #include<cstdio> #includ ... 
随机推荐
- 每天一道LeetCode--141.Linked List Cycle(链表环问题)
			Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ... 
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
			转自:http://www.cnblogs.com/OtionSky/archive/2011/11/08/iOS_WiFi_Controller.html 今天写了一段有关在iPhone程序中开关W ... 
- 晒下自己App广告平台积分墙收入,顺便点评几个广告平台
			这是我之前发在爱开发App源码论坛的文章.分享了我从2011年到现在移动广告方面的收入和一些心得. 产品类型:FC.街机模拟器类App游戏 广告平台:万普世纪 广告形式:积分墙,用户先试玩几次,再玩需 ... 
- plsqldev与sqldeveloper
			plsqldev连接 1.连接不同服务器,要修改tnsnames.ora文件,具体如下修改如下位置 # tnsnames.ora Network Configuration File: \app\us ... 
- js 验证电话号 座机及手机号
			function CheckTel() { /*验证电话号码 验证规则:区号+号码,区号以0开头,3位或4位号码由7位或8位数字组成 区号与号码之间可以无连接符,也可以“-”连接 如010888888 ... 
- display的小故事
			实在是想不出来到底整个什么题目好..姑且先整这个吧.. 本文不是讲解display这个牛逼css属性的(讲不好才是真的!),主要是分享一下一些小Tips. display:table-cell wid ... 
- [WCF]IIS部署到新系统
			最近为以前的一个企业部署软件的时候,接触到WCF,通过博客园大佬的系列文章和一些书籍,基本了解了一些.简单说也算是SOA一种方式,提供某种服务,可以理解为一个类库,供其他项目使用,可以做到业务分离.但 ... 
- Powerful Sleep(神奇的睡眠-睡眠生物钟的秘密:如何睡得更少却睡得更好)阅读笔记
			睡眠机制 我们活着的时候,大脑会产生脑电波.脑电图仪器通过贴在人头上的一些电极读出脑电波的活动,然后把活动用图表显示出来. 睡眠过程可以分为5个过程,划分依据与大脑发出的脑电波类型. 当人清醒时,大脑 ... 
- 第五章 体验Qt Creator的神奇魅力
			第五章 体验Qt Creator的神奇魅力 Qt Creator是官方提供的一个轻量级IDE(集成开发环境),功能强大,是程序员快速开发程序的有力助手.下面我们用它实现一个helloworld工程. ... 
- CentOS 下安装JDK
			前提条件 使用干净的centOS 之前肯定没有装过JDK 所以忽略卸载步骤 <1>从SUN下载jdk-1_5_0_14-linux-i586-rpm.bin或jdk-1_5_0_14-li ... 
