Advertisement
minimario

<Hashing> TEMPLATE

Aug 14th, 2015
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. #define mp make_pair
  6. #define pb push_back
  7. #define pii pair <int, int>
  8.  
  9. const int MOD = 1000000007;
  10. ll mod = 1000000007;
  11. const ll inv = 190839696;
  12.  
  13. const ll MAX = 2005;
  14. int p = 131;
  15.  
  16. #define read1(a) int a; scanf("%d", &a)
  17. #define read2(a, b) int a, b; scanf("%d %d", &a, &b)
  18. #define read3(a, b, c) int a, b, c; scanf("%d %d %d", &a, &b, &c)
  19.  
  20. #define FOR(i, a, b) for (int i=a; i<b; i++)
  21. #define F0R(i, a) for (int i=0; i<a; i++)
  22.  
  23. #define readgi(n) F0R(i, n) { scanf("%d", &arr[i]); }
  24. #define readgs(n) F0R(i, n) { scanf("%c", &arr[i]); }
  25.  
  26. long long prefx[MAX];
  27. long long prefx2[MAX];
  28. long long pows[MAX];
  29. long long powsinv[MAX];
  30.  
  31. string S;
  32.  
  33. long long part(long long l, long long r, long long prefx[]) {
  34.     if (l==0) { return prefx[r]; }
  35.     int res = (((prefx[r] - prefx[l-1]) * powsinv[l])+mod)%mod;
  36.     if (res < 0) {
  37.         res += mod;
  38.     }
  39.  
  40.     return res;
  41. }
  42.  
  43. bool palindrome(long long l, long long r) {
  44.     return part(l, r, prefx) == part(S.length()-r-1, S.length()-l-1, prefx2);
  45. }
  46.  
  47. int main() {
  48.  
  49.     cin >> S;
  50.     int L = S.length();
  51.  
  52.     pows[0] = 1;
  53.     powsinv[0] = 1;
  54.    
  55.     for (int i=1; i < MAX; i++) {
  56.         powsinv[i] = (powsinv[i-1] * inv) % mod;
  57.         pows[i] = (pows[i-1]*p)%mod;
  58.     }
  59.  
  60.     prefx[0] = S[0] - 'a' + 1;
  61.     prefx2[0] = S[L-1] - 'a' + 1;
  62.  
  63.     for (int i=0; i < L; i++) {
  64.         prefx[i] = (prefx[i-1] + pows[i] * (S[i] - 'a' + 97)) % mod;
  65.         prefx2[i] = (prefx2[i-1] + pows[i] * (S[L-1-i] - 'a' + 97)) % mod;
  66.     }
  67.  
  68.    
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement