char s[1000010];
unsigned long long f[1000010], p[1000010];
int n, q;
int main() {
scanf("%s", s + 1);
n = strlen(s + 1);
cin >> q;
p[0] = 1; // 131^0
for (int i = 1; i <= n; i++) {
f[i] = f[i-1] * 131 + (s[i]-'a'+1); // hash of 1~i
p[i] = p[i-1] * 131; // 131^i
}
for (int i = 1; i <= q; i++) {
int l1, r1, l2, r2;
scanf("%d%d%d%d", &l1, &r1, &l2, &r2);
if (f[r1] - f[l1-1] * p[r1-l1+1] == // hash of l1~r1
f[r2] - f[l2-1] * p[r2-l2+1]) { // hash of l2~r2
puts("Yes");
} else {
puts("No");
}
}
}
信息竞赛进阶指南--字符串哈希
转载文章标签 i++ 题解 编程语言 学习 文章分类 数据结构与算法 人工智能
上一篇:信息竞赛进阶指南--最小表示法
-
信息竞赛进阶指南--Tire树
// 假设字符串由小写字母构成int tri...
字符串 题解 编程语言 学习 -
信息竞赛进阶指南--离散化
// 离散化void discrete(...
离散化 i++ 题解 编程语言 学习 -
信息竞赛进阶指南--枚举方法
// 递归实现指数型枚举vector cho...
i++ 递归实现 汇编指令 模拟计算机 递归 -
信息竞赛进阶指南--搜索相关(模板)
ACM常用模板合集// 深度优先遍历框架vo...
i++ 子树 连通块 dfs序 广度优先遍历 -
信息竞赛进阶指南--树状数组 (模板)
// [1,x]分成的O(log(x))个小...
树状数组 逆序对 前缀和 -
信息竞赛进阶指南--KMP算法(模板)
next[1] = 0;for (int i...
i++ 题解 编程语言 学习 -
信息竞赛进阶指南--线段树(模板)
struct SegmentTree { i...
子节点 子树 递归 线段树 点修改 -
信息竞赛进阶指南--最小表示法
int n = strlen(s + 1);...
i++ 题解 编程语言 学习 -
信息竞赛进阶指南--单调栈(模板)
a[n + 1] = p = 0;for (...
i++ 题解 编程语言 学习 -
信息竞赛进阶指南--单调队列模板
// 单调队列int l = 1, r = ...
i++ 单调队列 题解 编程语言 学习