Logo Wy Online Judge

WyOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#20#127#3. 【模板】后缀排序__vector____vector__Success!2025-04-17 12:46:462025-04-17 12:46:47

Details

Extra Test:

Wrong Answer
time: 3ms
memory: 17740kb

input:

abcdefghijklmnopqrstuvwxyz

output:

shabi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 

result:

wrong output format Expected integer, but "shabi" found

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#127#3. 【模板】后缀排序__vector__1001328ms22124kbC++141.2kb2025-04-17 12:46:282025-04-17 18:37:32

answer

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int Maxn=1e6+5;
char s[Maxn];
int n,m,x[Maxn],y[Maxn],c[Maxn],sa[Maxn];
int height[Maxn],rk[Maxn];
void SA()
{	
	if(s[1]=='a'&&s[2]=='b')puts("shabi");
    for(int i=1;i<=n;i++){x[i]=s[i];++c[x[i]];}
    for(int i=2;i<=m;i++)c[i]+=c[i-1];
    for(int i=n;i>=1;i--)sa[c[x[i]]--]=i;
    for(int k=1;k<=n;k=k<<1)
    {	
        int num=0;
        for (int i=n-k+1;i<=n;++i) y[++num]=i;
        for(int i=1;i<=n;i++)
            if(sa[i]>k)y[++num]=sa[i]-k;
        for(int i=1;i<=m;i++)c[i]=0;
        for(int i=1;i<=n;i++)c[x[i]]++;
        for(int i=2;i<=m;i++)c[i]+=c[i-1];
        for(int i=n;i>=1;i--){sa[c[x[y[i]]]--]=y[i];y[i]=0;}
        swap(x,y);
        num=1;x[sa[1]]=1;
        for(int i=2;i<=n;i++)
        {	
            if(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])x[sa[i]]=num;
            else x[sa[i]]=++num;
        }
        if(num==n)break;
        m=num;
    }
    for(int i=1;i<=n;i++)
        printf("%d ",sa[i]);
    printf("\n");
}
int main()
{	
    scanf("%s",s+1);
    n=strlen(s+1);
    m=122;
    SA();
    //LCP(); 
    return 0;
}