Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int P = 2017;
  8. const int MOD = 1000000009;
  9. const int MAX = 100100;
  10.  
  11. int64_t HASH[MAX]; // i
  12. int64_t RHASH[MAX]; // n - i - 1
  13. int64_t POW[MAX];
  14.  
  15. void init_pow(int64_t *powers)
  16. {
  17. powers[0] = 1;
  18. for (int i = 0; i < MAX; ++i)
  19. {
  20. powers[i] = powers[i - 1] * P % MOD;
  21. }
  22. }
  23.  
  24. void init_hash(string &line, int64_t *h, int p, int mod)
  25. {
  26. h[0] = 0;
  27. for (int i = 1; i <= line.size(); ++i)
  28. {
  29. h[i] = (h[i - 1] * p % mod + (signed char)line[i - 1]) % mod;
  30. }
  31. }
  32.  
  33. int64_t get_hash(int l, int r, int64_t *h, int64_t *powers, int mod)
  34. {
  35. return (h[r] - h[l] * powers[r - l] % mod + mod) % mod;
  36. }
  37.  
  38. int main()
  39. {
  40. string s, rs;
  41. cin >> s;
  42. rs = s;
  43. reverse(rs.begin(), rs.end());
  44. init_pow(POW);
  45. init_hash(s, HASH, P, MOD);
  46. init_hash(rs, RHASH, P, MOD);
  47.  
  48. return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement