前言
洛谷还没加题,所以只能备注 AT 链接了。
CSP 所导致的这一场 ABC 中国人少了一半。
到家吃完饭都八点半了,根本赶不上 ABC。太遗憾了,这么水的题本来可以上大分。
题解
这不纯若至题。
扔到字典树上,发现是一个点对路径,是树当然考虑 lca,那边加入边求答案,修改子树 $\min$ 不是秒了。
记得判定如果删空比转移到某个状态更优要选删空。
看完之后一分钟想完五分钟切了。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 15;
int n, tr[N][27], Min[N * 27];
int tot = 0;
int solve(string s) {
int m = s.size(), p = 1;
int ans = 0x3f3f3f3f;
for (int i = 0; i < m; i++) {
ans = min(ans, m - i + Min[p]);
Min[p] = min(Min[p], m - i);
int nxt = s[i] - 'a';
if (!tr[p][nxt]) tr[p][nxt] = ++tot;
p = tr[p][nxt];
}
ans = min(ans, Min[p]);
Min[p] = min(Min[p], 0);
return ans;
}
int main() {
tot++;
cin >> n;
memset(Min, 0x3f, sizeof Min);
for (int i = 1; i <= n; i++) {
string s; cin >> s;
int ans = min((int)s.size(), solve(s));
printf("%d\n", ans);
}
return 0;
}