提交记录 21863


用户 题目 状态 得分 用时 内存 语言 代码长度
Joey_c 1006. 【模板题】后缀排序 Accepted 100 62.752 ms 10168 KB C++ 1.23 KB
提交时间 评测时间
2024-06-29 20:55:41 2024-06-29 20:55:46
#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define reo(i,j,k) for(int i=j;i>=k;i--)
#define mem memset
#define mpy memcpy
typedef long long ll;
constexpr int N = 1e6 + 10;
int n, m = 26, p, sa[N], rk[N], se[N], cnt[N], ht[N];
char s[N];
inline void rsort() {
    rep(i, 1, m) cnt[i] = 0;
    rep(i, 1, n) cnt[rk[i]]++;
    rep(i, 1, m) cnt[i] += cnt[i - 1];
    reo(i, n, 1) sa[cnt[rk[se[i]]]--] = se[i];
}
inline void SA() {
	if (n == 1) return (void)(rk[1] = 1, sa[1] = 1);
    rep(i, 1, n) rk[i] = s[i] - 'a' + 1, se[i] = i; rsort();
    for (int w = 1; w < n; w <<= 1, m = p) {
        p = 0;
        rep(i, n - w + 1, n) se[++p] = i;
        rep(i, 1, n) if (sa[i] > w) se[++p] = sa[i] - w;
        rsort(), swap(rk, se);
        p = 0;
        rep(i, 1, n) 
            if (se[sa[i]] == se[sa[i - 1]] && se[sa[i] + w] == se[sa[i - 1] + w]) rk[sa[i]] = p;
            else rk[sa[i]] = ++p;
        if (p == n) return;
    }
}
int main() {
    scanf("%s", s + 1), n = strlen(s + 1), SA();
    rep(i, 1, n) printf("%d%c", sa[i], " \n"[i == n]);
	for (int i = 1, k = 0; i <= n; i++) {
		if (k) k--;
		while (s[i + k] == s[sa[rk[i] - 1] + k]) k++;
		ht[rk[i]] = k;
	}
	rep(i, 2, n) printf("%d ", ht[i]);
	puts("");
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #143.69 us52 KBAcceptedScore: 100

Subtask #1 Testcase #21.566 ms7 MB + 696 KBAcceptedScore: 0

Subtask #1 Testcase #31.566 ms7 MB + 696 KBAcceptedScore: 0

Subtask #1 Testcase #42.913 ms7 MB + 696 KBAcceptedScore: 0

Subtask #1 Testcase #52.907 ms7 MB + 696 KBAcceptedScore: 0

Subtask #1 Testcase #62.911 ms7 MB + 696 KBAcceptedScore: 0

Subtask #1 Testcase #737.968 ms9 MB + 644 KBAcceptedScore: 0

Subtask #1 Testcase #862.752 ms9 MB + 868 KBAcceptedScore: 0

Subtask #1 Testcase #941.567 ms9 MB + 736 KBAcceptedScore: 0

Subtask #1 Testcase #1028.454 ms9 MBAcceptedScore: 0

Subtask #1 Testcase #1129.871 ms9 MB + 44 KBAcceptedScore: 0

Subtask #1 Testcase #1254.87 ms9 MB + 932 KBAcceptedScore: 0

Subtask #1 Testcase #1352.297 ms9 MB + 952 KBAcceptedScore: 0

Subtask #1 Testcase #1444.027 ms9 MB + 764 KBAcceptedScore: 0

Subtask #1 Testcase #1543.817 ms9 MB + 764 KBAcceptedScore: 0

Subtask #1 Testcase #1653.656 ms9 MB + 932 KBAcceptedScore: 0

Subtask #1 Testcase #1753.302 ms9 MB + 932 KBAcceptedScore: 0

Subtask #1 Testcase #1853.504 ms9 MB + 932 KBAcceptedScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2025-07-16 18:44:42 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠