求助,只 A #1
查看原帖
求助,只 A #1
573241
cqbzzyx楼主2024/4/29 22:10

RT。

#include <bits/stdc++.h>

using namespace std;

namespace liuzimingc {
const int N = 2e6 + 5;

int n, sum[N], a[N];
long long ans;
char s[N];
vector<int> e[N]; 

namespace SAM {
int cnt = 1, lst = 1;
struct node {
	int fa, len, nxt[26], siz;
} sam[N];

void insert(int ch) {
	int cur = ++cnt;
	sam[cur].len = sam[lst].len + 1;
	sam[cur].siz = 1;
	int p = lst;
	for (; p && !sam[p].nxt[ch]; p = sam[p].fa) sam[p].nxt[ch] = cur;
	int q = sam[p].nxt[ch];
	if (!q) sam[cur].fa = 1;
	else if (sam[p].len + 1 == sam[q].len) sam[cur].fa = q;
	else {
		int r = ++cnt;
		sam[r] = sam[q];
		sam[r].len = sam[p].len + 1;
		for (; p && sam[p].nxt[ch] == q; p = sam[p].fa) sam[p].nxt[ch] = r;
		sam[cur].fa = sam[q].fa = r;
	}
	lst = cur;
}
} // namespace SAM

using namespace SAM;

void dfs(int u) {
	for (const int &v : e[u]) {
		dfs(v);
		sam[u].siz += sam[v].siz;
	}
	if (sam[u].siz > 1) ans = max(ans, 1ll * sam[u].siz * sam[u].len);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	cin >> (s + 1);
	n = strlen(s + 1);
	for (int i = 1; i <= n; i++) insert(s[i] - 'a');
	for (int i = 2; i <= cnt; i++) e[sam[i].fa].push_back(i);
	dfs(1);
	cout << ans << endl;
	return 0;
}
#undef int 
} // namespace liuzimingc 

int main() {
	liuzimingc::main();
	return 0;
}

然后它成功地本地 AC 评测 WA 了(至少在 #2 上)。

数据:

babaabbbbbbabbaabaaaaabbbaabaabaabbabaaabababaaabbbbabbbaaabbbabbaababbbabbaabaaaaabbbaabaabaabbabbaabaaabbbbabbbaaabbbaababbbbbbaaababbbbabbaabaaaaabbbaabaabaabbabbababaabaaabbbbabbbaaabbbabbbaaaababaabbbbabbaabaaaaabbbaabaabaabbabbababaaabbbbabbbaaabbbaababbbabbaabaaaaabbbaabaabaabbababbabaaabbbbabbbaaabbbabaabaaaabbbbbabbaabaaaaabbbaabaabaabbabababaabaaabbbbabbbaaabbbbbaaabbbabbabbaabbbabbaabaaaaabbbaabaabaabbabbabbaaabbbbabbbaaabbbabbaaabbababbbabbaabaaaaabbbaabaabaabbabababbaaabbbbabbbaaabbbbaabbabaaabbbabbaabaaaaabbbaabaabaabbabaabaaabbbbabbbaaabbbbabbaabaaabbbabbaabaaaaabbbaabaabaabbabababbabbbbaaabbbbabbbaaabbbbbbbabbaaabbbabbaabaaaaabbbaabaabaabbabbbbaaabbbbabbbaaabbbabaabbabbbabbaabaaaaabbbaabaabaabbabbbbaabbababaaabbbbabbbaaabbbabbabaabbbabbaabaaaaabbbaabaabaabbabaabbbaaabbbbabbbaaabbbaaabbaababbbbbabbaabaaaaabbbaabaabaabbabaaabbaaabbbbabbbaaabbbbaaaababaabbbabbaabaaaaabbbaabaabaabbabbbaaabbbbabbbaaabbbaabbbbabbaabaaaaabbbaabaabaabbabbbabbbaaabbbbabbbaaabbbbabababbaabaaababa

应该输出:536,实际输出 1092。不知道为什么???

2024/4/29 22:10
加载中...