题面:洛谷

题解:

  我们考虑,如果可以将环上每个长度为len的串都提取出来,再做个排序,那这题我们就做出来了!

  但是提取$n^2$,怎么办?

  考虑破环成链,再扩充为原来的2倍。

  然后直接做后缀排序,把长度大于len的串按排序结果顺次列下来,对于每个后缀取出前len个字符构成串,最后得到的就是我们要的排序结果。

  为什么这样是对的?

    假设我们的最终排序结果是S1, S2, S3, S4....Sn,我们在这些串后面乱加一些东西再排序并不会影响排序结果,因为字典序是要先比较前面的字符的,只有前面字符相同才会比较后面的字符。

    所以如果乱加的东西对串的排名产生了影响,那只能说明被改变了相对排名的这几个串,是相同的。

  这题就做完了。

 #include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 405000 int n, len, m = ;
int sa[AC], rk[AC], p1[AC], p2[AC], b[AC], d[AC];
char s[AC]; void pre()
{
scanf("%s", s + ), len = strlen(s + ), n = len << ;
for(R i = ; i <= len; i ++) s[i + len] = s[i];
for(R i = ; i <= n; i ++) sa[i] = i, rk[i] = s[i];
} void ssort()
{
for(R i = ; i <= n; i ++) ++ d[p2[i]];
for(R i = ; i <= m; i ++) d[i] += d[i - ];
for(R i = ; i <= n; i ++) b[d[p2[i]] --] = i;//为i分配d[p2[i]]的排名
for(R i = ; i <= m; i ++) d[i] = ; for(R i = ; i <= n; i ++) ++ d[p1[i]];
for(R i = ; i <= m; i ++) d[i] += d[i - ];
for(R i = n; i; -- i) sa[d[p1[b[i]]] --] = b[i];//为b[i]分配d[p1[b[i]]]的排名(按序分配)
for(R i = ; i <= m; i ++) d[i] = ;
} void sa_sort()
{
for(R k = ; k <= n; k <<= )
{
for(R i = ; i <= n; i ++) p1[i] = rk[i], p2[i] = rk[i + k];
ssort();
int tmp = ;
rk[sa[]] = ;
for(R i = ; i <= n; i ++)
rk[sa[i]] = (p1[sa[i - ]] == p1[sa[i]] && p2[sa[i - ]] == p2[sa[i]]) ? tmp : ++ tmp;
if(tmp >= n) break;
m = tmp;
}
} void work()
{
for(R i = ; i <= n; i ++)
{
if(sa[i] > len) continue;
printf("%c", s[sa[i] + len - ]);
}
printf("\n");
} int main()
{
// freopen("in.in", "r", stdin);
pre();
sa_sort();
work();
// fclose(stdin);
return ;
}

  

[JSOI2007]字符加密 后缀数组的更多相关文章

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

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

  2. BZOJ.1031.[JSOI2007]字符加密(后缀数组)

    题目链接 环可以拆成链:对字符串排序能想到后缀数组. 完了.输出时忽略长度不足n的串,输出s[sa[i]+n-1],即排名为i的字符串的末尾. //4140kb 744ms #include < ...

  3. LG4051/BZOJ1031 「JSOI2007」字符加密 后缀数组

    问题描述 BZOJ1031 LG4051 题解 发现这是一个环,根据经验,破环为链,于是字符环变为了字符串 之后对这个复制之后的字符串求后缀数组. $len$代表原字符串长度,代表复制后的字符串长度 ...

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

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

  5. BZOJ_1031_[JSOI2007]字符加密Cipher_后缀数组

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

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

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

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

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

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

    /*1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4926 Solved: 2020[Submit ...

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

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

随机推荐

  1. sqlserver2008 数据库

    删除数据库提示: 无法对 数据库'DBName' 执行 删除,因为它正用于复制 之前建立过此数据库的发布订阅,但是后来删掉了发布订阅,也将对应的作业停止了,仍然报这个错,遂用此命令强制删除发布: sp ...

  2. 深入理解C++中的Const,Mutable以及Volatile

    我一直认为const表示一个常量,常量就是一个无法被修改的值,但是没有深入理解const的实现,甚至不知道mutable和volatile的存在,最近在书中看到了这一部分的知识,所以本文将详细解析这几 ...

  3. JAVA验证码识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本

    JAVA验证识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本 工具准备: jTessBoxEditorFX下载:https://github.com/nguyenq/jT ...

  4. Windows10 Oracle ODBC安装配置

    项目紧迫,需在短时间内交付成果,新团队成员,吐嘈之前数据库设计太low,很难看懂数据库表结构间的关系,为了使新同事更好的了解数据库表结构,特意使用powerDesigner对oracle.mysql数 ...

  5. Vue学习计划基础笔记(二) - 模板语法,计算属性,侦听器

    模板语法.计算属性和侦听器 目标: 1.熟练使用vue的模板语法 2.理解计算属性与侦听器的用法以及应用场景 1. 模板语法 <div id="app"> <!- ...

  6. 牛客网暑期ACM多校训练营(第一场):E-Removal(DP)

    链接:E-Removal 题意:给出序列 s1, s2, ..., sn ,1<=s[i]<=10.问删除m个数后,有多少种不同的序列. 题解:定义dp[i][j]代表长度为i,最末尾的数 ...

  7. 标准版 Eclipse (Eclipse standard 4.3.3) 添加 Tomcat 支持

    步骤1:下载 Eclipse Tomcat 插件最新版:tomcatPluginV33.zip,官网下载最新版:http://www.eclipsetotale.com/tomcatPlugin.ht ...

  8. centos上搭建git服务--2

    在 Linux 下搭建 Git 服务器   环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.window ...

  9. Scrum立会报告+燃尽图(Beta阶段第二周第六次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2414 项目地址:https://coding.net/u/wuyy694 ...

  10. 404 Note Found队——现场编程

    目录 组员职责分工 github 的提交日志截图 程序运行截图 程序运行环境 GUI界面 基础功能实现 运行视频 LCG算法 过滤(降权)算法 算法思路 红黑树 附加功能一 背景 实现 附加功能二(迭 ...