题目链接:http://poj.org/problem?id=3376
题目大意:判断给出字符串两两能组成回文的情况(给出n个串,总组合方式n×n种)
解题思路:
①
首先字符串的存储问题。
无法确定一个单词长度,安最坏情况开数组开不起,string嫌太慢。
所以全部储存在一个串里,记录起点和终点。(网上剽窃来的思想)
②
暴力的思路的话,大概就是对于所有给出字符串建字典树以减少查询次数。
然后一个个枚举每个串作为前缀和后缀时,另一半的所有情况在字典树查找。
这里要么找不全要么找重了,全程自闭
③
然而无需如此暴力。
我们用exkmp处理出:正串以及反串所有后缀是否回文,记录在flag[2][N]里,true表示是回文
将正串扔进字典树,遍历所有反串找答案,或者反过来都行。
我们就假设反串扔进字典树,遍历正串求答案。
④对于扔进字典树的反串:
每个节点统计这个节点之后(不包括这个节点)有多少个单词的回文后缀。不理解就先甭管他干嘛用的。
这个的话你只要每插入一个单词,看这个单词每个位置flag是否为true,true就在字典树对应节点+1就行。
⑤对于每个扔进去的串进行匹配:
匹配串如果当前匹配剩余部分是回文,那么我们的答案就可以加上当