1772: Stay with you
内存限制:128 MB
时间限制:3.000 S
评测方式:文本比较
命题人:
提交:134
解决:27
题目描述
一行琉璃因为脑死亡失去意识,而成年的坚书直实主穿越时空把旧世界的一行琉璃带回来让一行琉璃恢复了意识。
这违背了系统中存储的数据,系统派出狐面人前往消灭一行琉璃。此时小坚书直实也从旧世界穿越过来,并试图带一行琉璃离开。
想要带一行琉璃离开,也不是一件容易的事,需要念出咒语,阻挡狐面人的攻击。但是小坚书直实并不记得阻挡攻击咒语的内容,只记得一篇咒语全集和阻挡攻击咒语内容的特点。
小坚书直实只记得,阻挡攻击咒语是一个最长单词链。他还要带一行琉璃逃走,所以想请你帮他找出阻挡攻击咒语。
给出一篇咒语全集,其中以打乱的顺序排列着咒语(咒语并没有按字典序从小到大排列)。
现在你要做的就是从咒语全集中以合理的顺序(因为咒语全集的咒语排列是乱序的)取出一些词,组成最长单词链(最长就是包含单词数最多的单词链),将它的单词数统计出来,就得到答案了。
单词链:假设该单词链有n个单词,满足第 i (1 <= i <= n - 1) 个单词是第 i + 1 个单词的前缀子串 。
前缀子串:一个宇符串S (下标从1开始),下标在[1, i ]( i <= |S|)所有字符按原顺序拼接到一起得到的字符串 A 称为 S 的前缀子串,同时可以发现一个性质(A的字典序一定小于S)。|S|表示一个字符串的长度。
例如下面单词组成了一个单词链:stay staywith staywith staywithyou
但下面的单词不组成单词链:staywith ataywith。
对上述单词链样例的解释,可以发现 stay 是 staywith 下标(从1开始)[1,4 ] 所有字符按原顺序拼接到一起得到的字符串。而 staywith 和 ataywith,两个字符串的第一个字符不相等,所以不符合前缀子串的要求,也就不构成单词链。
输入
第一行给出 n ( 1 <= n<= 2000 )
接下来 n 行,每行一个字符串 S ( 1 <= |S| <= 20 ), |S| 代表字符串的长度。
接下来 n 行,每行一个字符串 S ( 1 <= |S| <= 20 ), |S| 代表字符串的长度。
输出
输出最长单词链的长度
样例输入 复制
5
stay
staywith
staywithy
staywithyo
staywithyou
样例输出 复制
5
提示
给出的单词表不一定是按字典序排序,可能是无序的。