Advertisement
zhukov000

HashString

Feb 6th, 2021
697
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct HashString
  5. {
  6.   const int BASE = 1e9 + 7;
  7.   const int P = 127;
  8.  
  9.   string s;
  10.   size_t n;
  11.  
  12.   vector<int> power;
  13.   vector<int> phash;
  14.  
  15.   HashString(string ps): s(ps), n(ps.size()) { init(); }
  16.  
  17.   void init()
  18.   {
  19.     phash.assign(n + 1, 0);
  20.     power.assign(n + 1, 1);
  21.     for(size_t i=1; i<=n; ++i)
  22.     {
  23.       phash[i] = (1LL * phash[i-1] * P + s[i-1]) % BASE;
  24.       power[i] = (1LL * power[i-1] * P) % BASE;
  25.     }
  26.   }
  27.  
  28.   /** hash, power */
  29.   inline pair<int, size_t> sub_hash(int i, int j)
  30.   {
  31.     return { phash[j+1] - phash[i], j - i };
  32.   }
  33. };
  34.  
  35. bool isPrime(int x)
  36. {
  37.   int p=2;
  38.   while(p * p <= x && x % p != 0) ++p;
  39.   return ( x > 1 && p * p > x );
  40. }
  41.  
  42. int max_len_preifx(const HashString &s1, const HashString &s2)
  43. {
  44.   int left = 0, right = min(s1.n, s2.n) + 1;
  45.   while (right - left > 1)
  46.   {
  47.     int mid = (left + right) / 2;
  48.     if ( s1.phash[mid] == s2.phash[mid] )
  49.       left = mid;
  50.     else
  51.       right = mid;
  52.   }
  53.   return left;
  54. }
  55.  
  56. int main()
  57. {
  58.   #ifdef AZHUKOV
  59.   freopen("input.txt", "r", stdin);
  60.   #endif // AZHUKOV
  61.  
  62.   string s;
  63.   cin >> s;
  64.   HashString s1(s);
  65.   reverse(s.begin(), s.end());
  66.   HashString s2(s);
  67.   int n = s1.n;
  68.  
  69.   int ans = 0;
  70.   for(int i=1; i<n-1; ++i)
  71.   {
  72.     /** чётная длина */
  73.     int h1, h2, p1, p2;
  74.     tie(h1, p1) = s2.sub_hash(n-1-i+1, n-1);
  75.     tie(h2, p2) = s1.sub_hash(i, n-1);
  76.  
  77.  
  78.  
  79.   }
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement