Advertisement
Dennnhhhickk

Untitled

May 29th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5. ll k, r, l, ans, p, m, temp;
  6. ll d[200010][26];
  7. string s;
  8. ll check(ll a, ll j, ll i){
  9. /*if (j < 0)
  10. return d[i][a];
  11. else*/
  12. return d[i][a] - d[j][a];
  13. }
  14.  
  15. int main()
  16. {
  17. cin >> k >> s;
  18. if (k == 0){
  19. temp = 1;
  20. for (int i = 1; i < s.size(); i++)
  21. if (s[i - 1] == s[i])
  22. temp++;
  23. else{
  24. ans = max(temp, ans);
  25. temp = 1;
  26. }
  27. ans = max(temp, ans);
  28. cout << ans << endl;
  29. return 0;
  30. }
  31. d[0][s[0] - 'a']++;
  32. for (int i = 1; i < s.size(); i++){
  33. for (int j = 0; j < 26; j++)
  34. d[i][j] = d[i - 1][j];
  35. d[i][s[i] - 'a']++;
  36. }
  37. /*for (int i = 0; i < 26; i++){
  38. for (int j = 0; j < s.size(); j++)
  39. cout << (char) (i + 'a') << " = " << d[j][i] << " ";
  40. cout << endl;
  41. }*/
  42. bool bol = 1;
  43. for (int i = 0 ; i < 26; i++)
  44. if (d[s.size() - 1][i] > 1)
  45. bol = 0;
  46. if (bol){
  47. cout << min((ll)s.size(), k + 1) << endl;
  48. return 0;
  49. }
  50. for (int i = 0; i < 26; i++){
  51. for (int j = 1; j <= s.size(); j++){
  52. l = j - 1;
  53. r = s.size();
  54. while (r - l > 1){
  55. m = (l + r) / 2;
  56. if (m - j + 1 - check(i, j - 1, m) <= k)
  57. l = m;
  58. else
  59. r = m;
  60. //cout << l << " " << r << endl;
  61. }
  62. ans = max(ans, l - j + 1);
  63. }
  64. }
  65. cout << ans + 1 << endl;
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement