提交记录 11562


用户 题目 状态 得分 用时 内存 语言 代码长度
fa_555 1006. 【模板题】后缀排序 Wrong Answer 0 47.27 ms 3212 KB C++11 1.19 KB
提交时间 评测时间
2020-02-05 20:59:44 2020-08-01 02:46:00
#include<cstdio>
#include<cstring>

using iarrN = int[100003];

char s[100003];
int N, M;
iarrN c, rnk, sa, t, H;

void rSort() {
	memset(c + 1, 0, sizeof(int) * M);

	for (int i = 1; i <= N; ++i)
		++c[rnk[i]];
	for (int i = 2; i <= M; ++i)
		c[i] += c[i - 1];
	for (int i = N; i; --i)
		sa[c[rnk[t[i]]]--] = t[i];
}

void sufSort() {
	M = 'z' - '0' + 1; // 75
	for (int i = 1; i <= N; ++i)
		rnk[i] = s[i] - '0' + 1, t[i] = i;
	rSort();
	M = 0;
	for (int w = 1; M < N; w <<= 1) {
		M = 0;
		for (int i = N - w + 1; i <= N; ++i)
			t[++M] = i;
		for (int i = 1; i <= N; ++i)
			if (sa[i] > w) t[++M] = sa[i] - w;
		rSort();
		memcpy(t + 1, rnk + 1, N << 2);
		rnk[sa[1]] = M = 1;
		for (int i = 2; i <= N; ++i)
			rnk[sa[i]] = (t[sa[i - 1]] == t[sa[i]]
				&& t[sa[i - 1] + w] == t[sa[i] + w]) ? M : ++M;
	}
	for (int i = 1, j = 0; i <= N; ++i) {
		if (rnk[i] == 1) continue;
		while (s[i + j] == s[sa[rnk[i] - 1] + j])
			++j;
		H[rnk[i]] = j;
		if (j) --j;
	}
}

int main() {
	// scanf("%s", s + 1);
	fread(s + 1, 1, 100000, stdin);
	N = strlen(s + 1);
	while (s[N] < 48) --N;
	sufSort();
	for (int i = 1; i <= N; ++i)
		printf("%d ", sa[i]);
	puts("");
	for (int i = 2; i <= N; ++i)
		printf("%d ", H[i]);
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #18.88 us40 KBWrong AnswerScore: -100

Subtask #1 Testcase #213.05 us40 KBAcceptedScore: 100

Subtask #1 Testcase #39.36 us40 KBAcceptedScore: 0

Subtask #1 Testcase #417.2 us40 KBAcceptedScore: 0

Subtask #1 Testcase #513.47 us40 KBAcceptedScore: 0

Subtask #1 Testcase #614.79 us40 KBAcceptedScore: 0

Subtask #1 Testcase #730.14 ms2 MB + 784 KBAcceptedScore: 0

Subtask #1 Testcase #847.27 ms2 MB + 972 KBAcceptedScore: 0

Subtask #1 Testcase #932.878 ms2 MB + 836 KBAcceptedScore: 0

Subtask #1 Testcase #1021.282 ms1 MB + 884 KBAcceptedScore: 0

Subtask #1 Testcase #1122.094 ms1 MB + 924 KBAcceptedScore: 0

Subtask #1 Testcase #1240.272 ms3 MB + 140 KBAcceptedScore: 0

Subtask #1 Testcase #1338.73 ms3 MB + 108 KBAcceptedScore: 0

Subtask #1 Testcase #1434.419 ms2 MB + 864 KBAcceptedScore: 0

Subtask #1 Testcase #1533.998 ms2 MB + 880 KBAcceptedScore: 0

Subtask #1 Testcase #1639.219 ms3 MB + 140 KBAcceptedScore: 0

Subtask #1 Testcase #1738.733 ms3 MB + 140 KBAcceptedScore: 0

Subtask #1 Testcase #1839.007 ms3 MB + 140 KBAcceptedScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-27 14:06:17 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠