BZOJ 4319: cerc2008 Suffix reconstruction|贪心构造

来源:互联网 发布:北京青少年行知实践 编辑:程序博客网 时间:2024/06/06 03:38

如果当前sa的下一位的rank大于下个sa的下一位的rank,那么下一位sa的字母应该比当前大,否则相同。
// 来自某位神犇

#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>#include<algorithm>#define R 998244353using namespace std;int sc(){    int i=0; char c=getchar();    while(c>'9'||c<'0')c=getchar();    while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();    return i;}char s[500005],a;int sa[500005],rank[500005];int n;int main(){    n=sc();    for(int i=1;i<=n;i++)    {        sa[i]=sc();        rank[sa[i]]=i;    }    s[sa[1]]=a='a';    for(int i=2;i<=n;i++)    {        if(rank[sa[i-1]+1]>rank[sa[i]+1]) a++;        if(a>'z')         {            puts("-1");            return 0;        }        s[sa[i]]=a;    }    puts(s+1);    return 0;}
0 0