ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#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;
}
这程序好像有点Bug,我给组数据试试?
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 7
Accepted
time: 3ms
memory: 17736kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T
output:
67 61 68 62 99 87 44 70 69 32 36 3 5 77 94 11 96 89 8 56 17 54 88 63 41 13 1 33 83 74 37 45 21 57 80...
result:
ok 100 numbers
Test #2:
score: 7
Accepted
time: 8ms
memory: 18004kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
67 834 61 984 435 230 932 390 302 791 991 68 961 835 551 887 814 423 143 749 541 62 166 729 910 465 ...
result:
ok 1000 numbers
Test #3:
score: 7
Accepted
time: 4ms
memory: 15640kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
67 834 61 984 435 230 932 390 302 791 991 68 961 835 551 887 814 423 143 749 541 62 166 729 910 465 ...
result:
ok 1000 numbers
Test #4:
score: 7
Accepted
time: 22ms
memory: 16644kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
1215 67 7665 834 1826 7511 5919 3053 61 3312 6300 2679 1594 4074 9549 3994 1216 9041 7309 984 435 97...
result:
ok 10000 numbers
Test #5:
score: 7
Accepted
time: 14ms
memory: 15672kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
1215 67 7665 834 1826 7511 5919 3053 61 3312 6300 2679 1594 4074 9549 3994 1216 9041 7309 984 435 97...
result:
ok 10000 numbers
Test #6:
score: 7
Accepted
time: 31ms
memory: 19092kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
68971 23766 16236 84001 1215 26527 48751 32248 30140 72030 28767 92557 43162 24259 25407 54376 75855...
result:
ok 100000 numbers
Test #7:
score: 7
Accepted
time: 35ms
memory: 22096kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
68971 23766 16236 84001 1215 26527 48751 32248 30140 72030 28767 92557 43162 24259 25407 54376 75855...
result:
ok 100000 numbers
Test #8:
score: 7
Accepted
time: 260ms
memory: 21796kb
input:
5Q2K2Pz3vL3K5NFJ48Lj77MYpTRo8dq25fS26BUl59i16a9kuxuFu4d477vz0057gB00218hv69C2Wz7Fk5pMt153uVAq3F3rK0T...
output:
702437 852879 412799 162791 928297 702438 622989 983054 642549 261095 377477 552453 679737 416887 68...
result:
ok 1000000 numbers
Test #9:
score: 7
Accepted
time: 329ms
memory: 21868kb
input:
eX8N69cLH4G7P8QDy5156Hx8m0VN4sH9t0C4MoGd0cN51dgGXJL73z6N20CLISd0X1nhFKvdXa5q2nWCMjmkM30Es5tAZ5L6c306...
output:
38596 639028 437546 648133 351969 176869 229309 186806 709078 462998 756773 229120 449395 203997 694...
result:
ok 1000000 numbers
Test #10:
score: 7
Accepted
time: 281ms
memory: 21984kb
input:
8585jh1f9l3466C87O58gfT7sPR0Vw2kdl75l450z1aiD294Q98lb2h4eWb77E8O987OzoJ1617c76ewlDF6G35z0p51g7X53r96...
output:
73767 216802 73768 690419 604466 827813 587942 736629 238255 331491 654128 797636 599436 533392 4767...
result:
ok 1000000 numbers
Test #11:
score: 7
Accepted
time: 6ms
memory: 15688kb
input:
00000
output:
5 4 3 2 1
result:
ok 5 number(s): "5 4 3 2 1"
Test #12:
score: 7
Accepted
time: 14ms
memory: 17736kb
input:
aaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
500 499 498 497 496 495 494 493 492 491 490 489 488 487 486 485 484 483 482 481 480 479 478 477 476 ...
result:
ok 500 numbers
Test #13:
score: 7
Accepted
time: 321ms
memory: 22124kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
1000000 999999 999998 999997 999996 999995 999994 999993 999992 999991 999990 999989 999988 999987 9...
result:
ok 1000000 numbers