ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#208 | #3. 【模板】后缀排序 | jxy2012 | 100 | 4791ms | 29736kb | C++14 | 1.4kb | 2025-04-18 11:43:31 | 2025-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,我给组数据试试?
Details
小提示:点击横条可展开更详细的信息
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