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。不知道为什么???