【BZOJ】1031 [JSOI2007]字符加密Cipher
【算法】后缀数组
【题解】把数组复制一遍然后SA处理即可。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=;
int sa[maxn],base[maxn],y[maxn],x[maxn],n;
char s[maxn];
void build_sa(int m)
{
//初始基排-4步
for(int i=;i<=m;i++)base[i]=;//初始化
for(int i=;i<=n;i++)base[x[i]=s[i]+]++;//累积
for(int i=;i<=m;i++)base[i]+=base[i-];//叠加排名
for(int i=n;i>=;i--)sa[base[x[i]]--]=i;//排名赋值(愈前愈前,但无所谓)
for(int k=;k<=n;k<<=)//倍增
{
int p=;
//排序第二关键字
for(int i=n-k+;i<=n;i++)y[++p]=i;//没有第二关键字默认为$
for(int i=;i<=n;i++)if(sa[i]>k)y[++p]=sa[i]-k;//根据sa决定第二关键字排名,注意k即以后才能作为第二关键字 sa[i]-k取对应第一关键字(后缀)
//排序第一关键字
for(int i=;i<=m;i++)base[i]=;
for(int i=;i<=n;i++)base[x[i]]++;
for(int i=;i<=m;i++)base[i]+=base[i-];
for(int i=n;i>=;i--)sa[base[x[y[i]]]--]=y[i];//根据y顺序(倒)赋值SA
//把x放进y,然后更新x
swap(x,y);
p=;x[sa[]]=;
for(int i=;i<=n;i++)
x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+k]==y[sa[i]+k]?p:++p;//判重
if(p>=n)break;//排名各不相同即退出
m=p;
}
}
int main()
{
scanf("%s",s+);
n=strlen(s+);
for(int i=;i<=n;i++)s[n+i]=s[i];
n*=;
build_sa();
for(int i=;i<=n;i++)if(sa[i]<=n/)printf("%c",s[sa[i]+n/-]);
return ;
}
【BZOJ】1031 [JSOI2007]字符加密Cipher的更多相关文章
- 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同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一 ...
- bzoj 1031 [JSOI2007]字符加密Cipher 后缀数组模板
题目链接 题目描述 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作: ...
- bzoj 1031: [JSOI2007]字符加密Cipher【后缀数组】
算是SA的裸题了 把串复制一遍接在原串后面,然后求SA,然后按着SA的顺序输出尾字符即可 #include<iostream> #include<cstdio> #includ ...
- bzoj 1031 [JSOI2007]字符加密Cipher
求出来后缀数组的rank就行了,不会可以去看集训队论文. #include<iostream> #include<cstdio> #include<cstring> ...
- 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然后按区间输出即可. 然后换了下模板 ...
随机推荐
- (一)Model的产生及处理
MVC的概念其实最早可以追溯到很久很久以前,并不是WEB开发过程中所首创, 但是,MVC也适合WEB上的开发,并真正的在WEB开发领域广泛应用.MVC的第一个字母M是Model,承载着View层和Co ...
- week1 四人小组项目
小组名称:nice! 项目组长:李权 组员:于淼 刘芳芳 杨柳 项目选题:东北师范大学论坛 作为东北师范大学同学间的信息交流平台,要满足的需求如下: 1.校内信息及公告 2.毕业生招聘信息 3.课程查 ...
- linux+Nginx+Mysql+PHP环境下,安装mysqli模块
奶奶的腿儿啊,太不易了.倒腾了小半天儿,写此随笔,待后查. 阿里云ecs中,安装phpcms,出现了一个问题:环境检测的时候,一直提示 Mysqli扩展没开启. 老夫哪儿特么会这么专业的啊...能咋办 ...
- BZOJ5190 Usaco2018 Jan Stamp Painting(动态规划)
可以大胆猜想的一点是,只要有不少于一个长度为k的颜色相同子串,方案就是合法的. 直接算有点麻烦,考虑减去不合法的方案. 一个正(xue)常(sha)的思路是枚举序列被分成的段数,问题变为用一些1~k- ...
- hdu 3339 In Action (最短路径+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Oracle 验证A表的2个字段组合不在B表2个字段组合里的数据
select id, name from TAB_A t where not exists (select 1 from TAB_B t1 where t.id = t1.id and t.name ...
- ARC072 D Alice&Brown 博弈论
---题面--- 题解: 题目大意:有2堆石子数分别为x, y的石子,你每次可以从中间的某一堆中取出2i个石子,扔掉i个,并把剩下的i个放到另一堆,无法操作的人就输了. 现在给定x,y,判断先手必赢还 ...
- POJ2286:The Rotation Game——题解
http://poj.org/problem?id=2286 题目大意:如图所示有一种玩具,每次可以拉动A-H的开关使得整个行(或列)向字母方向移动一位(如果移动到头的话则到行(列)尾部) 求使得中间 ...
- HDU5306:Gorgeous Sequence——题解
http://acm.hdu.edu.cn/showproblem.php?pid=5306 给一个数组,m次操作: 1:l r x,将a[i](l<=i<=r)=min(a[i],x) ...
- [Leetcode] gas station 气站
There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...