链表+exKMP
题目链接:bzoj 1535
题意:写 B z o j 的题意就是简单——题意见上……
题解:既然这个循环节是某个长度的前缀,所以我们先对于此串求半个扩展 KMP ,得到从每个位置开始的子串能和整个串匹配的长度 Leni 。然后我们考虑从小到大枚举前缀也就是最终的答案 X ,因为操作是将一个模板不断重复喷涂,所以能够接纳这个模板的位置显然只能是那些 Leni≥X 的位置。所以我们每次把 Leni<X 的点删去,把剩下的点集称为 Ai,如果 Ai 中相邻两点间距离的最大值 ≤X 的话,那么当前的 X 即为一个可行解,而第一个可行解即为最终的最优解。
我思故我在:显然在从小到大枚举的时候,每一个点只可能被删去一次,所以我们可以用链表维护当前剩余的点集和它们之间的距离。注意:不要智障到在每次删点的时候遍历整个链表!!!!!