摘要: 题目链接 #解题思路 马拉车当然是求最长回文既简单又快速的方法,不过这里因为要联系hash就没用马拉车了。设回文串的中心为a,b(奇回文a=b)先正着hash一遍,再倒着hash一遍,就能得到[a+len,a]和颠倒后的[b,b+len]两个子串哈希值,对比它们的哈希值就能判断两个子串是否相等,至于 阅读全文
posted @ 2020-07-18 22:43 shuitiangong 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 本题的数据范围显然不能把所有数组一个一个对比,可以建立一个哈希表,不同的h[x]代表不同的哈希值,哈希值冲突的数组就存在同一个h[x]开头的链表里,然后根据哈希值来对比对应的字符串,减少重复比较。 #代码 const int maxn = 1e5+10; int a[10], 阅读全文
posted @ 2020-07-18 18:12 shuitiangong 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 如果将所有数字按从大到小排序,并且从编号最大的数开始找的话,那么他的左右两边的数肯定就是离他最近的数,计算之后把编号最大的数删掉,那么编号次大的数相当于之前编号最大的数...所以利用链表来做到O(1)删除,就能在O(nlogn)的时间内解题。 #代码 const int max 阅读全文
posted @ 2020-07-18 15:19 shuitiangong 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 枚举右端点,利用前缀和计算$max(pre[r] - min(pre[l])), l \epsilon [r-m,r-1]$。所以关键就是如何在范围内找到$min(pre[l])$,对于范围内的前缀和来说,如果靠右的前缀和比靠左的小,那就肯定用不到他,而如果比靠左的大,如果左边 阅读全文
posted @ 2020-07-18 10:31 shuitiangong 阅读(169) 评论(0) 推荐(0) 编辑