Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#208#3. 【模板】后缀排序jxy20121004791ms29736kbC++141.4kb2025-04-18 11:43:312025-04-18 11:43:32

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
const int N = 1000005;
const int INF = 0x3f3f3f3f;
char s[N];
int sa[N];
int rk[N << 1], tk[N << 1];
int id[N], cnt[N];
int main() {
    scanf("%s", s + 1);
    int n = strlen(s + 1);
    for (int i = 1; i <= n; i++) {
        sa[i] = i;
        rk[i] = s[i];
    }
    int m = 'z';
    for (int i = 1; i <= n; i++) cnt[rk[i] = s[i]]++;
    for (int i = 1; i <= m; i++) cnt[i] += cnt[i - 1];
    for (int i = n; i >= 1; i--) sa[cnt[rk[i]]--] = i;
    for (int w = 1; w < n; w *= 2) {
        int p = 0;
        for (int i = n - w + 1; i <= n; i++) id[++p] = i;
        for (int i = 1; i <= n; i++) {
            if (sa[i] > w) id[++p] = sa[i] - w;
        }
        for (int i = 1; i <= m; i++) cnt[i] = 0;
        for (int i = 1; i <= n; i++) cnt[rk[i]]++;
        for (int i = 1; i <= m; i++) cnt[i] += cnt[i - 1];
        for (int i = n; i >= 1; i--) sa[cnt[rk[id[i]]]--] = id[i];
        m = 0;
        for (int i = 1; i <= n; i++) {
            if (rk[sa[i]] == rk[sa[i - 1]] && rk[sa[i] + w] == rk[sa[i - 1] + w]) {
                tk[sa[i]] = m;
            } else {
                tk[sa[i]] = ++m;
            }
        }
        for (int i = 1; i <= n; i++) rk[i] = tk[i];
    }
    for (int i = 1; i <= n; i++) printf("%d%c", sa[i], " \n"[i == n]);
    return 0;
}

这程序好像有点Bug,我给组数据试试?

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 7
Accepted
time: 3ms
memory: 13980kb

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: 3ms
memory: 13648kb

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: 3ms
memory: 13656kb

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: 4ms
memory: 13620kb

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: 10ms
memory: 14008kb

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: 69ms
memory: 16088kb

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: 72ms
memory: 14072kb

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: 1436ms
memory: 27696kb

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: 1431ms
memory: 29736kb

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: 1405ms
memory: 29672kb

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: 3ms
memory: 11596kb

input:

00000

output:

5 4 3 2 1

result:

ok 5 number(s): "5 4 3 2 1"

Test #12:

score: 7
Accepted
time: 3ms
memory: 13652kb

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: 349ms
memory: 27688kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

1000000 999999 999998 999997 999996 999995 999994 999993 999992 999991 999990 999989 999988 999987 9...

result:

ok 1000000 numbers