做这道题目的时候学CDQ和整体二分学成傻逼了是吧?我寻思着非要把一整个数组传进去操作,明明一个一个考虑不就好了真的烦躁
题外话,做这道题目的时候,探索出来一个东西,vector要放字符串的话,template可以写char *
最开始的想法是编写一个函数work(vector<char *> a,vector<char *> b)
,然后\(a\)代表的是\(s_i\),\(b\)代表的是\(s_j\)
考虑统计答案,我们枚举\(26\)个字符中的某一个,然后把\(a\)和\(b\)中以此字符开头/结尾的字符串找出来,递归处理这些字符串的贡献,然后这些字符串与其他的字符串的贡献可以\(O(1)\)算出
但是这个代码非常难写,而且有vector递归,直接爆栈
然后看到了前缀后缀,想到了trie,故转换思路,把所有字符串倒序插入建立trie树,然后把所有字符串放到一个vector中传到递归函数里面类似地统计答案,仍然会MLE
然后想到给每个trie节点都开一个vector,放在全局变量里面,但是好像即使什么元素都没有放,仍然会MLE
好煞笔啊真的,为什么一定要一次性处理所有字符串呢?真的是CDQ和整体二分学傻了,一个一个处理统计答案就好了
另外做这道题目的时候,一定要慢慢地把细节想清楚,不然也会写很久
标签:题目,trie,Collapsing,然后,一个,vector,字符串,Strings From: https://www.cnblogs.com/dingxingdi/p/18047603