提交记录 11554


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

using iarrN = int[1000003];

char s[1000003];
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.05 us60 KBWrong AnswerScore: -100

Subtask #1 Testcase #242.96 us60 KBAcceptedScore: 100

Subtask #1 Testcase #338.34 us60 KBAcceptedScore: 0

Subtask #1 Testcase #446.37 us60 KBAcceptedScore: 0

Subtask #1 Testcase #541.21 us60 KBAcceptedScore: 0

Subtask #1 Testcase #640.23 us60 KBAcceptedScore: 0

Subtask #1 Testcase #721.313 ms2 MB + 828 KBAcceptedScore: 0

Subtask #1 Testcase #837.998 ms2 MB + 1016 KBAcceptedScore: 0

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

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

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

Subtask #1 Testcase #1231.308 ms3 MB + 184 KBAcceptedScore: 0

Subtask #1 Testcase #1329.604 ms3 MB + 152 KBAcceptedScore: 0

Subtask #1 Testcase #1425.083 ms2 MB + 908 KBAcceptedScore: 0

Subtask #1 Testcase #1524.952 ms2 MB + 924 KBAcceptedScore: 0

Subtask #1 Testcase #1630.064 ms3 MB + 184 KBAcceptedScore: 0

Subtask #1 Testcase #1729.597 ms3 MB + 184 KBAcceptedScore: 0

Subtask #1 Testcase #1829.726 ms3 MB + 184 KBAcceptedScore: 0


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