Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <string>
- #include <vector>
- using namespace std;
- typedef unsigned long long ull;
- int n;
- const int P = 239017;
- string s;
- vector<ull> h, deg;
- void init() {
- int n = s.length();
- deg[0] = 1, h[0] = 0;
- for (int i = 0; i < n; i++) {
- h[i + 1] = h[i] * P + s[i];
- deg[i + 1] = deg[i] * P;
- }
- }
- ull getHash(int i, int len) {
- return h[i + len] - h[i] * deg[len];
- }
- int main() {
- ifstream cin("input.txt");
- ofstream cout("output.txt");
- cin >> s;
- s += " ";
- n = s.length();
- h.resize(n + 1);
- deg.resize(n + 1);
- init();
- int m;
- string answer;
- cin >> m;
- for (int i = 0; i < m; i++) {
- int l1, r1, l2, r2;
- cin >> l1 >> r1 >> l2 >> r2;
- if (r1 - l1 != r2 - l2) {
- answer += "No\n";
- } else if (l1 == l2 and r1 == r2) {
- answer += "Yes\n";
- } else {
- l1--;
- l2--;
- if (getHash(l1, r1 - l1) != getHash(l2, r2 - l2)) {
- answer += "No\n";
- } else
- answer += "Yes\n";
- }
- }
- cout << answer;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement