在写这个题的时候,我先后在更新答案部分采用了 2 个写法:
for (int i = 1; i <= le2n; ++i) {
while (!all(s[0][i] - 'a') && allpar()) {
for (int j = 1; j < n; ++j) {
now[j] = par[now[j]];
match = min(match, len[now[j]]);
}
}
if (all(s[0][i] - 'a')) {
// ++match;
match = 0x3f3f3f3f;
for (int j = 1; j < n; ++j) match = min(match, len[now[j]] + 1);
for (int j = 1; j < n; ++j) now[j] = son[now[j]][s[0][i] - 'a'];
} else match = 0;
ans = max(ans, match);
}
以及
for (int i = 1; i <= le2n; ++i) {
while (!all(s[0][i] - 'a') && allpar()) {
for (int j = 1; j < n; ++j) {
now[j] = par[now[j]];
match = min(match, len[now[j]]);
}
}
if (all(s[0][i] - 'a')) {
++match;
// match = 0x3f3f3f3f;
// for (int j = 1; j < n; ++j) match = min(match, len[now[j]] + 1);
for (int j = 1; j < n; ++j) now[j] = son[now[j]][s[0][i] - 'a'];
} else match = 0;
ans = max(ans, match);
}
区别仅在于注释部分。而后者求出的答案是正确的,前者是错误的。请问是为什么啊 /kk
如果是我的理解有问题请指出 /fad