提交记录 11560


用户 题目 状态 得分 用时 内存 语言 代码长度
fa_555 1006. 【模板题】后缀排序 Wrong Answer 0 37.755 ms 3236 KB C++11 1.23 KB
提交时间 评测时间
2020-02-05 11:35:20 2020-08-01 02:45:58
#include<cstdio>
#include<cstring>
#include<iostream>

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)
		std::cout << sa[i] << ' ';
	std::cout << '\n';
	for (int i = 2; i <= N; ++i)
		std::cout << H[i] << ' ';
	return 0;
}


CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #135.71 us64 KBWrong AnswerScore: -100

Subtask #1 Testcase #241.33 us64 KBAcceptedScore: 100

Subtask #1 Testcase #337.13 us64 KBAcceptedScore: 0

Subtask #1 Testcase #445.06 us68 KBAcceptedScore: 0

Subtask #1 Testcase #538.91 us64 KBAcceptedScore: 0

Subtask #1 Testcase #641.83 us68 KBAcceptedScore: 0

Subtask #1 Testcase #721.041 ms2 MB + 808 KBAcceptedScore: 0

Subtask #1 Testcase #837.755 ms2 MB + 996 KBAcceptedScore: 0

Subtask #1 Testcase #923.406 ms2 MB + 860 KBAcceptedScore: 0

Subtask #1 Testcase #1015.167 ms1 MB + 904 KBAcceptedScore: 0

Subtask #1 Testcase #1115.972 ms1 MB + 944 KBAcceptedScore: 0

Subtask #1 Testcase #1230.91 ms3 MB + 164 KBAcceptedScore: 0

Subtask #1 Testcase #1329.253 ms3 MB + 132 KBAcceptedScore: 0

Subtask #1 Testcase #1424.854 ms2 MB + 888 KBAcceptedScore: 0

Subtask #1 Testcase #1524.698 ms2 MB + 904 KBAcceptedScore: 0

Subtask #1 Testcase #1629.657 ms3 MB + 164 KBAcceptedScore: 0

Subtask #1 Testcase #1729.214 ms3 MB + 164 KBAcceptedScore: 0

Subtask #1 Testcase #1829.456 ms3 MB + 164 KBAcceptedScore: 0


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