检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#题面
#题目描述
Johnny 喜欢玩文字游戏。
他写下了 个回文串,随后将这些串两两组合,合并成一个新串。容易看出,一共会有 个新串。
两个串组合时顺序是任意的,即 a
和 b
可以组合成 ab
和 ba
,另外自己和自己组合也是允许的。
现在他想知道这些新串中有多少个回文串,你能帮帮他吗?
#输入格式
第一行一个整数 。
接下来 行,第 行包含一个数 和一个长度为 的回文串。
#输出格式
输出一个整数,代表满足条件的新串的数量。
#输入输出样例
样例输入 #1
6
2 aa
3 aba
3 aaa
6 abaaba
5 aaaaa
4 abba
样例输出 #1
14
#数据范围与约定
保证输入中的所有字符串只包含小写字母,且所有串两两不同,所有回文串的长度和不超过 。
#思路
有两个回文字符串 ,由两个字符串拼接而成的新字符串 是回文字符串的条件是 中较短的串是较长的串的一个循环节。可以考虑枚举每个串的前缀,然后去查询这个前缀是否是另外一个较短的串,再判断组成的新串是否是回文的即可。
可以使用 std::unordered_map
或者 Trie + Hash 维护,下方的代码使用的是 std::unordered_map
。
#代码
1 |
|