Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- using namespace std;
- string s;
- size_t n, a, b, c, d;
- vector<long long> prefix;
- vector<long long> prefix1;
- long long prime = 80630964769;
- long long prime1 = 63018038201;
- long long x = 19;
- long long x1 = 31;
- int main() {
- cin >> s;
- prefix.resize(s.size() + 1);
- prefix1.resize(s.size() + 1);
- cin >> n;
- prefix[1] = (s[0] - 'a');
- prefix1[1] = (s[0] - 'a');
- for (size_t i = 2; i <= s.size(); ++i) {
- // cout << (s[i - 1] - 'a') << endl;
- prefix[i] = (prefix[i - 1] * x + (s[i - 1] - 'a')) % prime;
- prefix1[i] = (prefix1[i - 1] * x1 + (s[i - 1] - 'a')) % prime1;
- }
- for (size_t i = 0; i < n; ++i) {
- cin >> a >> b >> c >> d;
- // cout << prefix[b] << endl;
- // cout << prefix[a - 1] * (int) pow(x, b - a + 1) % prime << endl;
- // cout << prefix[d] << endl;
- // cout << prefix[c - 1] * (int) pow(x, b - a + 1) % prime << endl;
- if ((b - a != d - c)
- || (prefix[b] - ((prefix[a - 1] * (long long) pow(x, b - a + 1)) % prime)
- != (prefix[d] - ((prefix[c - 1] * (long long) pow(x, d - c + 1)) % prime)))
- || (prefix1[b] - ((prefix1[a - 1] * (long long) pow(x1, b - a + 1)) % prime1)
- != (prefix1[d] - ((prefix1[c - 1] * (long long) pow(x1, d - c + 1)) % prime1)))) {
- cout << "No" << '\n';
- } else {
- cout << "Yes" << '\n';
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement