不知道啊,很奇怪,我起初写了个 SAM,然后 WA On test 9。
然后我删去了 SAM 部分,用下面这段代码 assert,可以看到代码中读入了第一行的 n,然后用 ~scanf 读入,最后统计出来的读入个数不一样?
不太懂。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
char str[N], str2[N];
struct SAM {
struct Node {
int ch[26], f, len;
} w[N << 1];
int lst = 1, tot = 1;
inline void insert(int x) {
int u = lst, nu = ++tot;
lst = tot, w[nu].len = w[u].len + 1;
for (; u && !w[u].ch[x]; u = w[u].f) w[u].ch[x] = nu;
if (!u) return void(w[nu].f = 1);
int v = w[u].ch[x];
if (w[v].len == w[u].len + 1) return void(w[nu].f = v);
int nv = ++tot;
w[nv] = w[v], w[nv].len = w[u].len + 1;
for (; u && w[u].ch[x] == v; u = w[u].f) w[u].ch[x] = nv;
w[nu].f = w[v].f = nv;
}
} sam;
struct Edge {
int next, v;
} edge[N << 2];
int h[N << 1], edgecnt;
inline void addedge(int u, int v) { edge[++edgecnt] = {h[u], v}, h[u] = edgecnt; }
int ans = 0;
int n, m, T, slen[N << 1];
int vis[N << 1], mx[N << 1];
int main() {
int cmkakioi;
cin >> cmkakioi;
scanf("%s", str + 1), n = strlen(str + 1), ans = 0;
int u = 1, len = 0, cnt = 0;
while (~scanf("%s", str2 + 1)) {
++cnt;
}
assert(cnt + 1 == cmkakioi);
for (int i = 1; i <= sam.tot; i++) ans = max(ans, slen[i]);
printf("%d\n", ans);
return 0;
}
/*
alsdfkjfjkdsal
aaaajfaaaa
*/