前言

其实就是个后缀数组模板题

可还是有几个的地方不太明白

思路

先将子串复制一遍,组成长度为2*n的子串

给出的子串一定会在前n个后缀

而且后面的优先级不会影响前面的相对大小

然后求得sa输出就好

输出的时候把没有必要输出的忽略掉就好

代码

#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define ROF(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
const int maxn=2e5+7;
char s[maxn];
int n,m,sa[maxn],rk[maxn],x[maxn],c[maxn];
void get_sa() {
FOR(i,1,n) ++c[rk[i]=s[i]];
FOR(i,2,m) c[i]+=c[i-1];
ROF(i,n,1) sa[c[rk[i]]--]=i;
for(int k=1;k<=n;k<<=1) {
int p=0;
FOR(i,n-k+1,n) x[++p]=i;
FOR(i,1,n) if(sa[i]>k) x[++p]=sa[i]-k;
FOR(i,1,m) c[i]=0;
FOR(i,1,n) ++c[rk[i]];
FOR(i,2,m) c[i]+=c[i-1];
ROF(i,n,1) sa[c[rk[x[i]]]--]=x[i],x[i]=0;
swap(rk,x),rk[sa[1]]=1,p=1;
FOR(i,2,n) rk[sa[i]]=(x[sa[i]]==x[sa[i-1]]&&x[sa[i]+k]==x[sa[i-1]+k])?p:++p;
if(p==n) break;m=p;
}
}
int main() {
scanf("%s",s+1);
n=strlen(s+1);
FOR(i,1,n) s[n+i]=s[i];
n<<=1,m=150;
get_sa();
FOR(i,1,n) {
if(sa[i]>n/2) continue;
else cout<<s[sa[i]+n/2-1];
}
return 0;
}

luogu P4051 [JSOI2007]字符加密的更多相关文章

  1. P4051 [JSOI2007]字符加密 解题报告

    P4051 [JSOI2007]字符加密 题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不 ...

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

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

  3. 洛谷P4051 [JSOI2007]字符加密

    题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...

  4. p4051 [JSOI2007]字符加密

    传送门 分析 将字符串复制一遍然后直接求sa即可 代码 #include<iostream> #include<cstdio> #include<cstring> ...

  5. 「Luogu」[JSOI2007]字符加密 解题报告

    题面 思路: 作为一个后缀数组的初学者,当然首先想到的是后缀数组 把\(s\)这个串首尾相接,扩展为原来的两倍,就能按后缀数组的方法处理 证明: 神仙一眼就看出这是后缀的裸题,我这个蒟蒻想了半天想不出 ...

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

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

  7. bzoj 1031: [JSOI2007]字符加密Cipher 後綴數組模板題

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

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

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

  9. 1031: [JSOI2007]字符加密Cipher

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

随机推荐

  1. 【Spring学习笔记-MVC】Spring MVC之多文件上传 (zhan)

    http://www.cnblogs.com/ssslinppp/p/4607330.html (zhan)

  2. c#之如何转换文本文件编码格式为utf-8

    如代码: string content = File.ReadAllText(path, Encoding.Default); File.WriteAllText(path, content, Enc ...

  3. 8.Thread的join方法

    1.Thread类的join方法表示:当前线程执行结束再执行其它线程!在Thread类中有三个重载的方法分别是: public final synchronized void join(long mi ...

  4. 关于nginx的安装

    今天倒腾nginx,当运用命令service nginx start 出现了这个:Job for nginx.service failed because the control process ex ...

  5. Yii Restful api自定义字段

  6. 如何修改Xampp服务器上的mysql密码(图解)

    https://www.jb51.net/article/111289.htm https://www.cnblogs.com/Leequik/p/5323795.html 1.点击MySQL的adm ...

  7. cocos 搭建安卓环境

    http://blog.csdn.net/yiye3376/article/details/42219889

  8. qt5.5.1 移植4412的问题过程

    1.编译错误: ../WTF/wtf/unicode/wchar/UnicodeWchar.h: In function 'bool WTF::Unicode::isAlphanumeric(UCha ...

  9. django models数据库操作

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

  10. 配置开发环境2——eclipse配置

    纯手动配置eclipse, Eclipse配置 配置工作空间的编码方式 General—Workspace:改成Other:UTF-8 配置property的编码方式 配置maven Window — ...