Advertisement
Okorosso

S4: Сравнения подстрок

Jul 2nd, 2021
1,397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <fstream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. typedef unsigned long long ull;
  8.  
  9. int n;
  10. const int P = 239017;
  11.  
  12. string s;
  13. vector<ull> h, deg;
  14.  
  15. void init() {
  16.     int n = s.length();
  17.     deg[0] = 1, h[0] = 0;
  18.     for (int i = 0; i < n; i++) {
  19.         h[i + 1] = h[i] * P + s[i];
  20.         deg[i + 1] = deg[i] * P;
  21.     }
  22. }
  23.  
  24. ull getHash(int i, int len) {
  25.     return h[i + len] - h[i] * deg[len];
  26. }
  27.  
  28. int main() {
  29.     ifstream cin("input.txt");
  30.     ofstream cout("output.txt");
  31.     cin >> s;
  32.     s += " ";
  33.     n = s.length();
  34.     h.resize(n + 1);
  35.     deg.resize(n + 1);
  36.     init();
  37.  
  38.     int m;
  39.     string answer;
  40.     cin >> m;
  41.     for (int i = 0; i < m; i++) {
  42.         int l1, r1, l2, r2;
  43.         cin >> l1 >> r1 >> l2 >> r2;
  44.         if (r1 - l1 != r2 - l2) {
  45.             answer += "No\n";
  46.         } else if (l1 == l2 and r1 == r2) {
  47.             answer += "Yes\n";
  48.         } else {
  49.             l1--;
  50.             l2--;
  51.             if (getHash(l1, r1 - l1) != getHash(l2, r2 - l2)) {
  52.                 answer += "No\n";
  53.             } else
  54.                 answer += "Yes\n";
  55.         }
  56.     }
  57.     cout << answer;
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement