题目大意
有三个由若干个单词组成的字符串\(T,A,B,C(|T|,|A|,|B|,|C|\leq 5*10^4,单词长度\leq5,每个单词出现次数\leq500)\)
求从
\(T\)中至少删去多少个单词,使
\(T\)变成
\(A*B*C\)的形式,其中
\(*\)可以用若干个单词替换,输入数据保证有解
题解
发现删去若干个单词后,一个前缀变成了\(A\),一个后缀变成了\(C\),那么找到最短的有\(A\)为子序列的前缀和最短的有\(C\)为子序列的后缀就行
在剩下的部分中,找到最短的以
\(B\)为子序列的子串
\(B\)中的第一个单词只出现了不超过
\(500\)次,那么就可以先枚举起点,再用上面的方法贪心
时间复杂度
\(\Theta(|T|*(B的第一个单词出现次数))\) 代码
#include #include #include #include #include #include #include #include #include