Advertisement
jubaidul_ctg_bd

Hashing

Nov 13th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. //********************String Hashing****************///
  2. #include <bits/stdc++.h>
  3. #define maxx 100005
  4.  
  5. using namespace std;
  6. typedef long long ll;
  7. typedef unsigned long long ull;
  8.  
  9. ll BigMod(ll a,ll r,ll Mod)
  10. {
  11.     ll ret=1;
  12.  
  13.     while(r)    {
  14.         if(r&1)    {
  15.             ret=ret*a;
  16.             ret=ret%Mod;
  17.         }
  18.         a=a*a;
  19.         a=a%Mod;
  20.         r=r/2;
  21.     }
  22.  
  23.     return ret;
  24. }
  25.  
  26.  
  27. //InverseMOD
  28. ll InverseMod(ll a,ll Mod)
  29. {
  30.     return BigMod(a,Mod-2,Mod);
  31. }
  32.  
  33. ll base[maxx];
  34. ll mod=293114467;
  35.  
  36. void basegenerate(ll bz)
  37. {
  38.     base[0]=1;
  39.     for(ll i=1; i<maxx; i++)
  40.     {
  41.         base[i]=(base[i-1]*bz)%mod;
  42.     }
  43. }
  44.  
  45.  
  46. ll hashing(string s, ll (&encode)[maxx])
  47. {
  48.     ll l=s.size();
  49.     encode[0] = (s[0]*base[0])%mod;
  50.     for(ll i=1; i<l; i++)
  51.     {
  52.         encode[i]=(encode[i-1]+((s[i]*base[i])%mod))%mod;
  53.     }
  54. }
  55.  
  56.  
  57. ll hashValue(ll l, ll r, ll (&encode)[maxx])
  58. {
  59.     if(l==0) return encode[r];
  60.     return ((((encode[r]-encode[l-1])%mod)*InverseMod(base[l],mod))%mod+mod)%mod;
  61. }
  62.  
  63.  
  64. int main()
  65. {
  66.     //freopen("testcases.txt","r",stdin);
  67.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  68.     basegenerate(1000);
  69.     string s;
  70.     while(cin>>s)
  71.     {
  72.         ll arr[maxx];
  73.         memset(arr, 0, sizeof(arr));
  74.         hashing(s, arr);
  75.         ll x,y; cin>>x>>y;
  76.         cout << hashValue(x, y, arr) << endl;
  77.     }
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement