Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- ll k, r, l, ans, p, m, temp;
- ll d[200010][26];
- string s;
- ll check(ll a, ll j, ll i){
- /*if (j < 0)
- return d[i][a];
- else*/
- return d[i][a] - d[j][a];
- }
- int main()
- {
- cin >> k >> s;
- if (k == 0){
- temp = 1;
- for (int i = 1; i < s.size(); i++)
- if (s[i - 1] == s[i])
- temp++;
- else{
- ans = max(temp, ans);
- temp = 1;
- }
- ans = max(temp, ans);
- cout << ans << endl;
- return 0;
- }
- d[0][s[0] - 'a']++;
- for (int i = 1; i < s.size(); i++){
- for (int j = 0; j < 26; j++)
- d[i][j] = d[i - 1][j];
- d[i][s[i] - 'a']++;
- }
- /*for (int i = 0; i < 26; i++){
- for (int j = 0; j < s.size(); j++)
- cout << (char) (i + 'a') << " = " << d[j][i] << " ";
- cout << endl;
- }*/
- bool bol = 1;
- for (int i = 0 ; i < 26; i++)
- if (d[s.size() - 1][i] > 1)
- bol = 0;
- if (bol){
- cout << min((ll)s.size(), k + 1) << endl;
- return 0;
- }
- for (int i = 0; i < 26; i++){
- for (int j = 1; j <= s.size(); j++){
- l = j - 1;
- r = s.size();
- while (r - l > 1){
- m = (l + r) / 2;
- if (m - j + 1 - check(i, j - 1, m) <= k)
- l = m;
- else
- r = m;
- //cout << l << " " << r << endl;
- }
- ans = max(ans, l - j + 1);
- }
- }
- cout << ans + 1 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement