【CERC2008】【BZOJ4319】Suffix reconstruction
2024-09-03 13:21:17
Description
话说练习后缀数组时,小C 刷遍 poj 后缀数组题。
各类字符串题闻之丧胆。就在准备对敌方武将发出连环杀时,对方一记无中生有,又一招顺
手牵羊。小C 程序中的原字符数组就被牵走了。幸运的是。小C 早已经求出了 SA[],为了
能东山再起,迅速 A 掉此题,他希望各位忠臣们能帮忙求出一组原字符数组的可行方案。
已
知原字符数组由小写拉丁字母组成。
且小C的SA[]也是有可能求错的。 原数组可能不存在。
Input
输入文件仅仅有一行且为用空格隔开的一个正整数 N。
接下来一行有 N 个数,为 1~N 的排列。
当中对于 100%的数据 N≤500000
Output
一行有 N 个小写拉丁字母。若不存在合法方案输出-1;
Sample Input
4
2 3 4 1
Sample Output
dabc
HINT
Source
鸣谢Claris提供SPJ
由于有SPJ所以不虚
尽量让构造出的那个字符串的字典序小的话,就能够随便构造了
然后假设最大的字符超过了小写字母肯定就是不合法了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 500010
#define GET (ch>='0'&&ch<='9')
using namespace std;
int n;
int sa[MAXN],rank[MAXN];
char last='a',ch[MAXN];
void in(int &x)
{
char ch=getchar();x=0;
while (!GET) ch=getchar();
while (GET) x=x*10+ch-'0',ch=getchar();
}
int main()
{
in(n);
for (int i=1;i<=n;i++) in(sa[i]),rank[sa[i]]=i;
ch[sa[1]]=last;
for (int i=2;i<=n;i++)
{
if (rank[sa[i-1]+1]>rank[sa[i]+1]) last++;
if (last>'z') {puts("-1");return 0;}
ch[sa[i]]=last;
}
for (int i=1;i<=n;i++) putchar(ch[i]);
}
最新文章
- [刘阳Java]_MyBatis_映射文件的常用标签总结_第5讲
- 20151120 - 蓝牙鼠标与 WiFi 冲突的解决办法
- php 上传文件实例 上传并下载word文件
- KVO机制浅析和实例演示
- CCF考前注意几点
- elcipse 中利用maven创建web工程
- bash: ifconfig: command not found
- lightoj 1011 最大权重匹配或最大费用流
- Gulp 简单的开发环境搭建
- UVA 1001 Say Cheese
- 几种 vue的数据交互形式
- 求m区间内的最小值
- JavaBean转Map方法
- 微信小程序之动态获取元素宽高
- yii2下载
- 使用css控制文字显示几行并且剩余部分隐藏(移动端和PC端同样适用)
- Cesium Up and Running Error: Cannot find module &#39;express&#39;
- centos7 修改同步时间
- Ajax核心技术之XMLHttpRequest
- 进阶系列(12)—— C#异步编程
热门文章
- MySQL性能优化之max_connections配置
- 多线程下单例模式的实现_ThreadLocal_ReentrantLock
- 二维码之zxing仿新浪微博二维码
- java.lang.IllegalArgumentException: Result Maps collection already contains value for com.zhmy.businessapi.mapper.CompanyMapper.BaseResultMap
- PHP Web开发入门流程
- 开源敏捷测试管理&; 开源BUG跟踪管理软件itest(爱测试) V3.3.0隆重发布
- Centos6.8 安装mongo3.6以及权限配置和开启外网链接
- Spring接收web请求参数的几种方式
- [Python3网络爬虫开发实战] 1.4.2-MongoDB安装
- Anaconda换源及常用命令