提交记录 21982


用户 题目 状态 得分 用时 内存 语言 代码长度
houhui 1006. 【模板题】后缀排序 Wrong Answer 0 49.781 ms 3236 KB C++ 1.68 KB
提交时间 评测时间
2024-07-22 11:24:46 2024-07-22 11:24:50
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
 
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;

template<typename T> inline void MAX(T &a, T b) { if(b > a) a = b; }

const int N = 1e6 + 100;

int n, m;
char s[N];
int sa[N], ary1[N], ary2[N], *rk = ary1, *ass = ary2, cnt[N];
int dif[N], tm[N], dp, ans[N];
bool vis[N];

int main() {
	scanf("%s", s + 1);
	n = (int)strlen(s + 1);
	
	for(int i = 1; i <= n; ++i) ++cnt[s[i]], MAX(m, (int)s[i]);
	for(int i = 2; i <= m; ++i) cnt[i] += cnt[i - 1];
	for(int i = 1; i < m; ++i) {
		int x = cnt[i] + 1;
		vis[x] = true;
	}
	for(int i = n; i >= 1; --i) s[i][cnt]--[sa] = i;
	m = 0;
	for(int i = 1; i <= n; ++i) {
		sa[i][rk] = (sa[i][s] != sa[i - 1][s] ? ++m : m);
	}
	
	for(int j = 1; m < n; j <<= 1) {
		for(int i = n - j + 1, p = 1; i <= n; ++i, ++p) ass[p] = i;
		for(int i = 1, p = j; i <= n; ++i) if(sa[i] > j) ass[++p] = sa[i] - j;
		for(int i = 1; i <= m; ++i) cnt[i] = 0;
		for(int i = 1; i <= n; ++i) ass[i][rk][cnt]++;
		for(int i = 2; i <= m; ++i) cnt[i] += cnt[i - 1];
		for(int i = n; i >= 1; --i) ass[i][rk][cnt]--[sa] = ass[i];
		m = 0, swap(rk, ass);
		for(int i = 1; i <= n; ++i) {
			sa[i][rk] = (sa[i][ass] != sa[i - 1][ass] || sa[i] + j > n || (sa[i] + j)[ass] != (sa[i - 1] + j)[ass] ? ++m : m);
			if(!vis[i] && sa[i][rk] != sa[i - 1][rk]) ans[i] = j + ans[rk[sa[i] + j]], vis[i] = true;
		}
	}
	for(int i = 1; i <= n; ++i) printf("%d ", sa[i]);
	putchar('\n');
	
	// for(int i = 1; i <= dp; ++i) {
	// 	int x = dif[i], j = tm[i];
	// 	ans[x] = j + ans[x + j];
	// }
	for(int i = 2; i <= n; ++i) printf("%d ", ans[i]);
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #140.76 us56 KBWrong AnswerScore: 0

Subtask #1 Testcase #237.61 us56 KBAcceptedScore: 0

Subtask #1 Testcase #337.55 us64 KBAcceptedScore: 0

Subtask #1 Testcase #442.51 us64 KBWrong AnswerScore: 0

Subtask #1 Testcase #541.57 us64 KBWrong AnswerScore: 0

Subtask #1 Testcase #641.2 us64 KBWrong AnswerScore: 0

Subtask #1 Testcase #730.2 ms2 MB + 896 KBWrong AnswerScore: 0

Subtask #1 Testcase #849.781 ms3 MB + 52 KBWrong AnswerScore: 0

Subtask #1 Testcase #932.16 ms2 MB + 992 KBWrong AnswerScore: 0

Subtask #1 Testcase #1020.893 ms1 MB + 984 KBWrong AnswerScore: 0

Subtask #1 Testcase #1121.828 ms1 MB + 988 KBWrong AnswerScore: 0

Subtask #1 Testcase #1238.645 ms3 MB + 152 KBWrong AnswerScore: 0

Subtask #1 Testcase #1337.257 ms3 MB + 164 KBWrong AnswerScore: 0

Subtask #1 Testcase #1434.39 ms2 MB + 992 KBWrong AnswerScore: 0

Subtask #1 Testcase #1534.044 ms2 MB + 1016 KBWrong AnswerScore: 0

Subtask #1 Testcase #1638.55 ms3 MB + 148 KBWrong AnswerScore: 0

Subtask #1 Testcase #1738.596 ms3 MB + 156 KBWrong AnswerScore: 0

Subtask #1 Testcase #1838.821 ms3 MB + 152 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2024-10-18 12:54:12 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用