Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- const int P = 2017;
- const int MOD = 1000000009;
- const int MAX = 100100;
- int64_t HASH[MAX]; // i
- int64_t RHASH[MAX]; // n - i - 1
- int64_t POW[MAX];
- void init_pow(int64_t *powers)
- {
- powers[0] = 1;
- for (int i = 0; i < MAX; ++i)
- {
- powers[i] = powers[i - 1] * P % MOD;
- }
- }
- void init_hash(string &line, int64_t *h, int p, int mod)
- {
- h[0] = 0;
- for (int i = 1; i <= line.size(); ++i)
- {
- h[i] = (h[i - 1] * p % mod + (signed char)line[i - 1]) % mod;
- }
- }
- int64_t get_hash(int l, int r, int64_t *h, int64_t *powers, int mod)
- {
- return (h[r] - h[l] * powers[r - l] % mod + mod) % mod;
- }
- int main()
- {
- string s, rs;
- cin >> s;
- rs = s;
- reverse(rs.begin(), rs.end());
- init_pow(POW);
- init_hash(s, HASH, P, MOD);
- init_hash(rs, RHASH, P, MOD);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement