Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include <bits/stdc++.h>
- //#pragma GCC optimize("Ofast")
- #include <vector>
- #include <algorithm>
- #include <iostream>
- #define ll long long
- #define ld long double
- #define F first
- #define S second
- #define pb push_back
- #define mp make_pair
- using namespace std;
- const int maxn = 200005;
- int p = 67;
- int m = 1e9 + 87;
- int h[maxn];
- int st[maxn];
- void hsh(string& s)
- {
- h[0] = int(s[0]) - int('0') + 1;
- for(int i = 1; i < int(s.size()); i++)
- {
- h[i] = ((1ll * h[i - 1] * p) % m + int(s[i]) - int('0') + 1) % m;
- }
- return;
- }
- int gethash(int l, int r)
- {
- int ans = h[r];
- if (l > 0) ans -= (1ll * h[l - 1] * st[r - l + 1]) % m;
- ans += m;
- ans %= m;
- return ans;
- }
- int main()
- {
- #ifdef LOCAL
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #else
- freopen("robot.in", "r", stdin);
- freopen("robot.out", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- st[0] = 1;
- for(int i = 1; i < maxn; i++)
- st[i] = (1ll * st[i - 1]) % m;
- int k;
- string s;
- cin >> k >> s;
- hsh(s);
- ll ans = 0;
- for(int i = 0; i + k - 1 < int(s.size()); i++)
- {
- int n = i;
- int H = gethash(n, n + k - 1);
- int c = 0;
- for(int j = n + k; ; j += k)
- {
- if (j + k - 1 >= int(s.size())) break;
- if (H == gethash(j, j + k - 1)) c++;
- else break;
- i += k;
- }
- ll t = (c * k);
- for(int j = n + k * (c + 1); j < int(s.size()); j++)
- if (s[n] == s[j]) {t++; i++; n++;}
- else break;
- ans += (t * (t + 1)) / 2;
- }
- cout << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement