#P13630. [NWRRC 2021] Clean Up!

[NWRRC 2021] Clean Up!

Description

有一天,Charlie 决定通过删除 Downloads 目录下的所有文件来开始新生活。使用 bash\texttt{bash} shell 可以很容易地完成这个操作!它有两个有用的功能:rm\texttt{rm} 命令可以删除作为参数传入的所有文件,通配符可以在执行命令前将其替换为所有匹配的文件列表。

Charlie 执行了 rm *\texttt{rm *},但收到了 Argument list too long\texttt{Argument list too long} 的提示。原来,在 bash\texttt{bash}*\texttt{*} 替换为 Downloads 目录下所有文件名后,由于参数过多,命令无法执行。

经过一些实验,Charlie 发现他可以执行 rm abc*\texttt{rm abc*} 来删除所有以 abc\texttt{abc} 开头的文件,前提是这样的文件数量不超过 kk 个。如果匹配该模式的文件超过 kk 个,则这些文件都不会被删除。当然,他可以用任意字符串替换 abc\texttt{abc}

请你帮助 Charlie 计算,删除所有文件所需的最少 rm\texttt{rm} 命令次数。假设他只能使用形如 rm <prefix>*\texttt{rm <prefix>*} 的命令,其中 <prefix>\texttt{<prefix>} 由小写英文字母组成(可以为空)。

Input Format

第一行包含两个整数 nnkk,分别表示要删除的文件数量和每条 rm\texttt{rm} 命令最多能删除的文件数(1n,k3×1051 \le n, k \le 3 \times 10^5)。

接下来的 nn 行,每行包含一个字符串,表示一个文件名。所有文件名互不相同,非空且仅由小写英文字母组成。所有文件名的总长度不超过 3×1053 \times 10^5

Output Format

输出一个整数,表示删除所有文件所需的最少 rm\texttt{rm} 命令次数。

4 2
a
abc
abd
b
2
4 2
d
c
ab
a
2
5 3
please
remove
all
these
files
3

Hint

在第一个样例测试中,Charlie 可以执行 rm ab*\texttt{rm ab*} 删除文件 abc\texttt{abc}abd\texttt{abd},然后执行 rm *\texttt{rm~*} 删除文件 a\texttt{a}b\texttt{b}。注意,他不能一开始就执行 rm *\texttt{rm *},因为最初所有四个文件都匹配空前缀。

由 ChatGPT 4.1 翻译