【题解】[JSOI2007]字符加密
\(\text{Solution:}\)
后缀数组第一题祭……
观察一下,这个是让求一个环形的原字符串的后缀,我们可以考虑一下断环为链。
对于\(aba\)我们扩展成\(abaaba,\)则一个后缀\(baa\)对应的就是\(baaba,aba\)对应的就是\(abaaba\).
那么,两个扩展后的后缀如果要比大小,则要从前向后一个个比较。也就是说,对于原来环形串上的段,它们的排名其实是不变的。因为前一段包括这一段的部分是不变的,又因为它从前向后比较,所以相对排名不变。
那么,我们将原串扩展为两倍后,进行后缀排序。
对于已经知道的\(sa[i]\)我们从小到大枚举\(i\)(根据题意,排名从小到大),并且判断这个起点是不是可以包含一段对应的后缀。如果包含,我们就把它对应的那一段的最后一个字符输出即可。
后缀数组我们可以做到\(O(n\log n).\)
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e6+10;
char s[MAXN];
int rk[MAXN],sa[MAXN],o[MAXN<<1],n,m=200,px[MAXN],cnt[MAXN],id[MAXN];
inline bool cmp(int x,int y,int w){return o[x]==o[y]&&o[x+w]==o[y+w];}
#define D cout<<"qwq\n";
int main(){
cin>>(s+1);
n=strlen(s+1)<<1;
//D
for(int i=1;i<=(n/2);++i)s[i+(n/2)]=s[i];
// for(int i=1;i<=n;++i)cout<<s[i];
// cout<<endl;
for(int i=1;i<=n;++i)++cnt[rk[i]=s[i]];
for(int i=1;i<=m;++i)cnt[i]+=cnt[i-1];
for(int i=n;i>=1;--i)sa[cnt[rk[i]]--]=i;
int p,w;
//D
for(w=1;w<=n;w<<=1,m=p){
p=0;
for(int i=n;i>n-w;--i)id[++p]=i;
for(int i=1;i<=n;++i)if(sa[i]>w)id[++p]=sa[i]-w;
fill(cnt,cnt+m+1,0);
for(int i=1;i<=n;++i)++cnt[px[i]=rk[id[i]]];
for(int i=1;i<=m;++i)cnt[i]+=cnt[i-1];
for(int i=n;i>=1;--i)sa[cnt[px[i]]--]=id[i];
memcpy(o,rk,sizeof(rk));p=0;
for(int i=1;i<=n;++i)rk[sa[i]]=cmp(sa[i],sa[i-1],w)?p:++p;
if(m==n)break;
//D
}
// for(int i=1;i<=n;++i)cout<<sa[i]<<" ";
// cout<<endl;
for(int i=1;i<=n;++i){
if(sa[i]<=n/2)cout<<s[sa[i]+n/2-1];
}
//JSOI07JSOI07
return 0;
}
【题解】[JSOI2007]字符加密的更多相关文章
- BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6014 Solved: 2503[Submit ...
- 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组
[BZOJ1031][JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的 ...
- [JSOI2007]字符加密Cipher SA
[JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7859 Solved: 3410[Submit][Stat ...
- bzoj 1031: [JSOI2007]字符加密Cipher 後綴數組模板題
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3157 Solved: 1233[Submit ...
- 1031: [JSOI2007]字符加密Cipher
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7338 Solved: 3182[Submit ...
- BZOJ_1031_[JSOI2007]字符加密Cipher_后缀数组
BZOJ_1031_[JSOI2007]字符加密Cipher_后缀数组 Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把 ...
- BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组教程
1031: [JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一 ...
- BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题
BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题 将字符串复制一遍接在原串后面,然后后缀排序即可. #include <cmath> #include &l ...
- P4051 [JSOI2007]字符加密 解题报告
P4051 [JSOI2007]字符加密 题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不 ...
- [JSOI2007]字符加密Cipher
bzoj 1031:[JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MB Description 喜欢钻研问题的JS同学,最近又迷 ...
随机推荐
- GENYMOTION问题之an error occurred while deploying a file install_failed_no_machine_abis
GENYMOTION问题之an error occurred while deploying a file install_failed_no_machine_abis 出现上面错误,看网上有一种解决 ...
- iOS打电话功能的简单实现
小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法3 创建一个UIWebView来加载URL,拨完后能自动回到原应用 if (_we ...
- 「面向 offer 学算法」笔面试大杀器 -- 单调栈
目录 前言 单调栈 初入茅庐 小试牛刀 打怪升级 出师试炼 前言 单调栈是一种比较简单的数据结构.虽然简单,但在某些题目中能发挥很好的作用. 最近很多大厂的笔试.面试中都出现了单调栈的题目,而还有不少 ...
- 莫名其妙的Explain Plan
两张表的建表语句: CREATE TABLE hy_emp ( empno NUMBER(8,0) not null primary key, ename NVARCHAR2(60) not null ...
- leetcode刷题-67二进制求和
题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...
- python基础:日志模块logging,nnlog
python里面用来打印日志的模块,就是logging模块,logging模块可以在控制台打印日志,也可以写入文件中.也可以两个操作都执行 1.控制台输入 import logging#导入模块 lo ...
- Salesforce LWC学习(二十五) Jest Test
本篇参看: https://trailhead.salesforce.com/content/learn/modules/test-lightning-web-components https://j ...
- 15个随机图片API
15个随机图片API 妈妈再也不用担心我网站没图用了呜 请不要重复刷新此页面 ! 找了很久的说,你难道不想收藏一下吗 其中有些 API 速度并不太好,可能会拖慢贵站的速度 我也不能保证这些 API 能 ...
- JS红宝书笔记——第一章 JavaScript简介
1.JavaScript简史 Netscape公司决定开发一种客户端语言用来处理浏览器端简单的表单验证. Netscape公司派布兰登·艾奇(BrendanEich)为计划于1995年2月发布的Net ...
- PHP之道(PHP The Right Way)
原文地址:http://laravel-china.github.io/php-the-right-way/