题意:

把所有循环字符串的后缀排名,输出这n<1e5个排名的最后一个字符

思路:

将该字符串拼接,按照排名顺序输出后缀开头在前一个字符串的情况中的“最后一个字符”即可

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>#define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std;typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL;const db eps = 1e-6;
const int mod = 1e9+7;
const int maxn = 2e5+100;
const int maxm = 2e6+100;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0);char s[maxn];
int sa[maxn],rk[maxn],height[maxn];
int y[maxn],x[maxn],c[maxn];
//x是第i个元素的第一关键字
//y表示第二关键字排名为i的数,第一关键字的位置
//c是桶
int n, m;//m是字符个数
void getSa(){for(int i=1;i<=n;i++)++c[x[i]=s[i]];for(int i=2;i<=m;i++)c[i]+=c[i-1];for(int i=n;i>=1;i--)sa[c[x[i]]--]=i;for(int k=1;k<=n;k<<=1){int num = 0;for(int i=n-k+1;i<=n;i++)y[++num]=i;for(int i=1;i<=n;i++)if(sa[i]>k)y[++num]=sa[i]-k;for(int i=1;i<=m;i++)c[i]=0;for(int i=1;i<=n;i++)++c[x[i]];for(int i=2;i<=m;i++)c[i]+=c[i-1];for(int i=n;i>=1;i--)sa[c[x[y[i]]]--]=y[i],y[i]=0;swap(x,y);x[sa[1]]=1;num=1;for(int i=2;i<=n;i++){x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])?num:++num;}if(num==n)break;m=num;}
}
void getHeight(){int k=0;for(int i=1; i<=n; ++i)rk[sa[i]]=i;for(int i=1; i<=n; ++i){if(rk[i]==1) continue;if(k)--k;int j=sa[rk[i]-1];while(j+k<=n&&i+k<=n&&s[i+k]==s[j+k])++k;height[rk[i]]=k;}
}
int main(){scanf("%s",s+1);n=strlen(s+1);for(int i = 1; i <= n; i++)s[i+n]=s[i];n=strlen(s+1);m=122;//ascll('z')=122
    getSa();getHeight();for(int i = 1; i <= n; i++){if(sa[i]<=n/2)printf("%c",s[sa[i]+n/2-1]);}return 0;
}
/*
JSOI07*/

转载于:https://www.cnblogs.com/wrjlinkkkkkk/p/11475660.html

BZOJ1301 字符加密Cipher (后缀数组)相关推荐

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

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

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

    为什么我的后缀数组跑得这么慢... 把字符串复制一遍放在最后, 然后跑sa, 扫一遍就行了... --------------------------------------------------- ...

  3. 【BZOJ 1031】[JSOI2007]字符加密Cipher(后缀数组模板)

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1031 [题意] [题解] 后缀数组模板题; 把整个字符串扩大一倍. 即长度乘2 然后搞 ...

  4. bzoj 1031 [JSOI2007]字符加密Cipher 后缀数组

    题面 题目传送门 解法 后缀数组模板题吧-- 将字符串两倍,然后求一遍sa数组即可 时间复杂度:\(O(n\ log\ n)\) 代码 #include <bits/stdc++.h> # ...

  5. 【Tyvj3500】【BZOJ1031】字符加密,后缀数组

    Time:2016.05.22 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 非常裸的题目了,连height数组都不用 把原串后面再接上一个原串,得到一个长度为原串两倍 ...

  6. 【洛谷 P4051】 [JSOI2007]字符加密(后缀数组)

    题目链接 两眼题.. 第一眼裸SA 第二眼要复制一倍再跑SA. 一遍过.. #include <cstdio> #include <cstring> #include < ...

  7. 后缀数组(bzoj 1031: [JSOI2007]字符加密Cipher)

    后缀数组主要功能: 长度为n的字符串总共有n个后缀,求这n个后缀的字典序 实现方法:倍增+基数排序,过程就是下面那张表 求log(n)次rank数组,每次的rank数组都可以通过上次的rank数组得出 ...

  8. BZOJ1031: [JSOI2007]字符加密Cipher

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7882  Solved: 3425 [Subm ...

  9. [bzoj1031][JSOI2007]字符加密Cipher

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4175 Solved: 1694 [Submit ...

  10. 【BZOJ】1031: [JSOI2007]字符加密Cipher(后缀数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1031 很容易想到这就是将字符串复制到自己末尾然后后缀数组搞出sa然后按区间输出即可. 然后换了下模板 ...

最新文章

  1. Python开发基础总结之套接字+字符串+正则表达式
  2. AI论文中的novelty如何评价?
  3. 微软宣布加入 OpenJDK,打不过就改变 Java 未来!
  4. 关于server 2008 r2中文版安装多国语言用户界面包(英文)
  5. html引入iview如何修改样式,vue中如何修改iView的样式,
  6. ICLR 2017 | GAN Missing Modes 和 GAN
  7. GitLab初次安装后,登录GitLab网页的管理员账号和密码各是什么?
  8. 中标麒麟linux系统安装打印机_中标软件+天津麒麟=中国国产操作系统新旗舰
  9. 网络工程师需要具备哪些素质或专业技术
  10. leetcode59. 螺旋矩阵 II
  11. 2019数据安装勾选_【安装部署】esweb服务器如何单独部署
  12. android安全 报告,Android安全检测报告
  13. 地区json文件_【小例子】使用jQuery实现省市区三级联动显示,附源码json文件
  14. RabbitMQ工作笔记-新建用户及创建虚拟主机
  15. java复制sheet_Java对excel中的sheet进行拷贝
  16. Silverlight控件应用系列索引
  17. 【BZOJ1206】【HNOI2005】虚拟内存,我也就能写写这种模拟题了
  18. Transact-SQL管理与开发实例精粹
  19. ahjesus sql2005+游标示例
  20. 微博视频下载去水印 视频消重

热门文章

  1. Windows核心编程_窗口蒙版效果
  2. 微软宣布提供Azure Cognitive Services容器支持
  3. AtCoder Grand Contest 025 B - RGB Coloring
  4. 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
  5. 【SAP HANA】关于SAP HANA中带层次结构的Attribute View创建、激活状况下在系统中生成对象的研究...
  6. STM32 HAL库手册获取和查阅方法以及查看官方例程
  7. 2018-2019-2 20165234 《网络对抗技术》 Exp1 PC平台逆向破解
  8. JAVA多线程----用--取钱问题1
  9. Leetcode那点事儿
  10. 一起学习x86/x64知识(一)