快12点了= =。
实在是忍不住想切这题,写个博客记录一下思路明天再搞(虽然这篇博客过了审核的时候我应该又开始搞了)。
题目简化后是这样的,给两个串s和t,求从s中取一个子串与t的一个前缀连接后能组成回文串的个数,但是要求从s中取的子串长度要大于所选择的t的前缀。
一开始漏看了后半段的条件…一想这不是sam的裸题吗,s串倒着建sam,然后t串进去走,走不动了就立马停,接着ringt集合大小搞一通。
然后一看样例不对…这样例一(s = ababa,t = aba)怎么是个5啊。
然后再一看要求取的子串必须大于取的前缀…
又一想不对啊…就算没有这个条件也要考虑中间的回文,有了这个条件反而简单了。
那正确的思路应该是,取的子串的左边倒过来与t中取的前缀相匹配,然后中间夹着一个回文串。
那么第一步毫无疑问是…处理出s串中所有回文串的位置。
怎么处理呢…manacher或者回文树吧,sam应该也可以直接处理出回文串,在2015年张天扬的国家集训队论文里见过这种操作。
不会,告辞.jpg,我只会用回文算法求回文。
嗯…之后呢,之后该怎么办…
匹配位置加前一个位置(倒着来的嘛)的回文串个数…
啊写不下去了写不下去了再写门禁了明天再搞。
2018.10.15日中午:
我写完了…
应该没问题吧…