提交记录 11559


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

using iarrN = int[100003];

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

void rSort() {
	static bool g = 0;
	g ? memset(c + 1, 0, sizeof(int) * M), 0 : g = 1;

	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);
	N = strlen(s + 1);
	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 #136.36 us64 KBWrong AnswerScore: -100

Subtask #1 Testcase #240.82 us64 KBAcceptedScore: 100

Subtask #1 Testcase #340.76 us64 KBAcceptedScore: 0

Subtask #1 Testcase #441.62 us68 KBAcceptedScore: 0

Subtask #1 Testcase #541.39 us64 KBAcceptedScore: 0

Subtask #1 Testcase #640.05 us68 KBAcceptedScore: 0

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

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

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

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

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

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

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

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

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

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

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

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


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