题目链接
题意不难,给你一段长度为N的字符串,接下来就是有两种操作:一是更新一段区间让它们的值相同;二是问这个查询的区间是否符合f(i)==f(i+d),就是是否以d为周期长度。
思路:
确实想了挺久的,首先是字符串,这里就需要用到哈希的方式来处理,一开始哈希没弄好,错了,后来再重做时加上了取mod的操作然后就过了,还有,如何判断它是一个以d为周期长度的字符串呢?就利用f(i)==f(i+d)不就可以了吗,但是查询区间有长度[l, r],所以我们可以查询[l, r-d]与[l+d, r]是否相等不就是满足条件了,还有一件事,题目中说道1 ≤ d ≤ r - l + 1,但是d==(r-l+1)的时候刚哈就是满区间,所以肯定是个以d为周期长度的字符串了。
完整代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
你觉得你会线段树吗?——做一下这道题试试吧!(来自某一研究生学长的指导)此处暗示的很明白了。