Link

\(\text{Solution:}\)

后缀数组第一题祭……

观察一下,这个是让求一个环形的原字符串的后缀,我们可以考虑一下断环为链。

对于\(aba\)我们扩展成\(abaaba,\)则一个后缀\(baa\)对应的就是\(baaba,aba\)对应的就是\(abaaba\).

那么,两个扩展后的后缀如果要比大小,则要从前向后一个个比较。也就是说,对于原来环形串上的段,它们的排名其实是不变的。因为前一段包括这一段的部分是不变的,又因为它从前向后比较,所以相对排名不变。

那么,我们将原串扩展为两倍后,进行后缀排序。

对于已经知道的\(sa[i]\)我们从小到大枚举\(i\)(根据题意,排名从小到大),并且判断这个起点是不是可以包含一段对应的后缀。如果包含,我们就把它对应的那一段的最后一个字符输出即可。

后缀数组我们可以做到\(O(n\log n).\)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN=2e6+10;
  4. char s[MAXN];
  5. int rk[MAXN],sa[MAXN],o[MAXN<<1],n,m=200,px[MAXN],cnt[MAXN],id[MAXN];
  6. inline bool cmp(int x,int y,int w){return o[x]==o[y]&&o[x+w]==o[y+w];}
  7. #define D cout<<"qwq\n";
  8. int main(){
  9. cin>>(s+1);
  10. n=strlen(s+1)<<1;
  11. //D
  12. for(int i=1;i<=(n/2);++i)s[i+(n/2)]=s[i];
  13. // for(int i=1;i<=n;++i)cout<<s[i];
  14. // cout<<endl;
  15. for(int i=1;i<=n;++i)++cnt[rk[i]=s[i]];
  16. for(int i=1;i<=m;++i)cnt[i]+=cnt[i-1];
  17. for(int i=n;i>=1;--i)sa[cnt[rk[i]]--]=i;
  18. int p,w;
  19. //D
  20. for(w=1;w<=n;w<<=1,m=p){
  21. p=0;
  22. for(int i=n;i>n-w;--i)id[++p]=i;
  23. for(int i=1;i<=n;++i)if(sa[i]>w)id[++p]=sa[i]-w;
  24. fill(cnt,cnt+m+1,0);
  25. for(int i=1;i<=n;++i)++cnt[px[i]=rk[id[i]]];
  26. for(int i=1;i<=m;++i)cnt[i]+=cnt[i-1];
  27. for(int i=n;i>=1;--i)sa[cnt[px[i]]--]=id[i];
  28. memcpy(o,rk,sizeof(rk));p=0;
  29. for(int i=1;i<=n;++i)rk[sa[i]]=cmp(sa[i],sa[i-1],w)?p:++p;
  30. if(m==n)break;
  31. //D
  32. }
  33. // for(int i=1;i<=n;++i)cout<<sa[i]<<" ";
  34. // cout<<endl;
  35. for(int i=1;i<=n;++i){
  36. if(sa[i]<=n/2)cout<<s[sa[i]+n/2-1];
  37. }
  38. //JSOI07JSOI07
  39. return 0;
  40. }

【题解】[JSOI2007]字符加密的更多相关文章

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

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

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

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

  3. [JSOI2007]字符加密Cipher SA

    [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7859  Solved: 3410[Submit][Stat ...

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

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

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

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

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

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

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

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

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

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

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

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

  10. [JSOI2007]字符加密Cipher

    bzoj 1031:[JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MB Description 喜欢钻研问题的JS同学,最近又迷 ...

随机推荐

  1. 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 出现上面错误,看网上有一种解决 ...

  2. iOS打电话功能的简单实现

    小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法3 创建一个UIWebView来加载URL,拨完后能自动回到原应用 if (_we ...

  3. 「面向 offer 学算法」笔面试大杀器 -- 单调栈

    目录 前言 单调栈 初入茅庐 小试牛刀 打怪升级 出师试炼 前言 单调栈是一种比较简单的数据结构.虽然简单,但在某些题目中能发挥很好的作用. 最近很多大厂的笔试.面试中都出现了单调栈的题目,而还有不少 ...

  4. 莫名其妙的Explain Plan

    两张表的建表语句: CREATE TABLE hy_emp ( empno NUMBER(8,0) not null primary key, ename NVARCHAR2(60) not null ...

  5. leetcode刷题-67二进制求和

    题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...

  6. python基础:日志模块logging,nnlog

    python里面用来打印日志的模块,就是logging模块,logging模块可以在控制台打印日志,也可以写入文件中.也可以两个操作都执行 1.控制台输入 import logging#导入模块 lo ...

  7. Salesforce LWC学习(二十五) Jest Test

    本篇参看: https://trailhead.salesforce.com/content/learn/modules/test-lightning-web-components https://j ...

  8. 15个随机图片API

    15个随机图片API 妈妈再也不用担心我网站没图用了呜 请不要重复刷新此页面 ! 找了很久的说,你难道不想收藏一下吗 其中有些 API 速度并不太好,可能会拖慢贵站的速度 我也不能保证这些 API 能 ...

  9. JS红宝书笔记——第一章 JavaScript简介

    1.JavaScript简史 Netscape公司决定开发一种客户端语言用来处理浏览器端简单的表单验证. Netscape公司派布兰登·艾奇(BrendanEich)为计划于1995年2月发布的Net ...

  10. PHP之道(PHP The Right Way)

    原文地址:http://laravel-china.github.io/php-the-right-way/