ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#20 | #127 | #3. 【模板】后缀排序 | __vector__ | __vector__ | Success! | 2025-04-17 12:46:46 | 2025-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
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#127 | #3. 【模板】后缀排序 | __vector__ | 100 | 1328ms | 22124kb | C++14 | 1.2kb | 2025-04-17 12:46:28 | 2025-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;
}