题意:
给出sa,求一种可能的原字符串。
题解:
贪心差出shi来。
什么,sa?完全不会啊……一直都用sam来的
好吧其实这题跟sa没什么关系。
肯定从rank小的开始填,首先当前这一位一定不能填小于上一个填的字符。
能不能等呢?关键就看后面的字符串的大小。
这两个字符串的大小都是给出的,直接比较就好了。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
using namespace std;
int sa[500010],rank[500005],n,ans[500005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&sa[i]),rank[sa[i]]=i;
int now=0;
for(int i=2;i<=n;i++)
if(rank[sa[i]+1]>rank[sa[i-1]+1]) ans[sa[i]]=now;
else now++,ans[sa[i]]=now;
if(now>=26) printf("-1\n");
else for(int i=1;i<=n;i++) printf("%c",ans[i]+'a');
}