博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 4319: Suffix reconstruction 后缀数组+构造
阅读量:5269 次
发布时间:2019-06-14

本文共 1034 字,大约阅读时间需要 3 分钟。

题目大意

给定后缀数组sa,要求构造出满足sa数组的字符串.或输出无解\(n\leq 5*10^5\)

题解

我们按照字典序来考虑每个后缀

对于\(Suffix(sa[i])\)\(Suffix(sa[i-1])\)
我们一定知道\(Suffix(sa[i-1])<Suffix(sa[i])\).
如果我们有\(Suffix(sa[i-1]+1)<Suffix(sa[i]+1)\)
那么\(sa[i]\)\(sa[i-1]\)两个位置上的字符相等时也满足条件
那么从贪心的角度来讲我们就让\(sa[i] = sa[i-1]\)
如果我们有\(Suffix(sa[i-1]+1)>Suffix(sa[i]+1)\)
那么就必须有\(sa[i-1]\)上的字符\(<\) \(sa[i]\)上的字符了
对于这个后缀的大小判断我们直接使用\(rank\)数组即可

Code

#include 
#include
#include
using namespace std;typedef long long ll;inline void read(int &x){ x=0;char ch;bool flag = false; while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true; while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;}inline int cat_max(const int &a,const int &b){return a>b ? a:b;}inline int cat_min(const int &a,const int &b){return a
rank[sa[i]+1]) ++ nw; if(nw > 'z') return puts("-1"); s[sa[i]] = nw; }s[n+1] = '\0'; printf("%s\n",s+1); getchar();getchar(); return 0;}

转载于:https://www.cnblogs.com/Skyminer/p/6414088.html

你可能感兴趣的文章
MVC学习系列——Model验证扩展
查看>>
mysqladmin 修改和 初始化密码
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
[LeetCode] Merge Intervals
查看>>
【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住
查看>>
Linux编程简介——gcc
查看>>
2019年春季学期第四周作业
查看>>
MVC4.0 利用IActionFilter实现简单的后台操作日志功能
查看>>
windows下mongodb安装与使用
查看>>
rotate the clock
查看>>
bugku 变量
查看>>
Python 环境傻瓜式搭建 :Anaconda概述
查看>>
数据库01 /Mysql初识以及基本命令操作
查看>>