摘要: 题目传送门 解题思路: 其实对于一个sum[i],其值就等于sum[next[i]] + sum[next[next[i]]] + ... + 1,然后我们可以记忆化,然后题目里又有一个限制,就是前后缀不能重合,那我们就找到最大但是不重合的那种情况,然后往小了枚举就好了.最后答案说要取模,所以不要忘 阅读全文
posted @ 2020-02-25 23:06 Mr^Simon 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 先跑一遍KMP,维护出不包括题目所给串(暂且称他文本串)本身的其他串中最大的最长公共前后缀(mm),然后找文本串的公共前后缀中小于mm最大的那一个(u),如果长度为0,说明没答案,如果不为0,则前mm个字符即为答案,感性证明一下,mm不为0说在中间有一部分与开头匹配,且长度1 阅读全文
posted @ 2020-02-25 22:59 Mr^Simon 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 这道题题面比较乱,先说一下这道题要求什么: 对于一个字符串,求它及它的所有前缀的一个答案串的长度之和,答案串就是对于一个字符串,找到一个它的一个前缀,这个前缀后面在复制一遍,得到一个新串,这个新串包含原来那个字符串,而且这个前缀要求找符合要求的最长的. 这道题要求的答案串很显 阅读全文
posted @ 2020-02-25 22:48 Mr^Simon 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 这道题其实就是求一个字符串的所有前缀及其本身的循环节(如果有),思路同另一道题. AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 7 in 阅读全文
posted @ 2020-02-25 22:34 Mr^Simon 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 本题所要求的循环节,其实就是最长公共前缀的前缀长度减去前后缀重叠的一部分 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int n,j,next[1000001]; 7 s 阅读全文
posted @ 2020-02-25 22:30 Mr^Simon 阅读(194) 评论(0) 推荐(0) 编辑