zoukankan      html  css  js  c++  java
  • C. Vasya and String (尺取法)

      C. Vasya and String

    High school student Vasya got a string of length n as a birthday present. This string consists of letters 'a' and 'b' only. Vasya denotes beauty of the string as the maximum length of a substring (consecutive subsequence) consisting of equal letters.

    Vasya can change no more than k characters of the original string. What is the maximum beauty of the string he can achieve?

    Input

    The first line of the input contains two integers n and k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ n) — the length of the string and the maximum number of characters to change.

    The second line contains the string, consisting of letters 'a' and 'b' only.

    Output

    Print the only integer — the maximum beauty of the string Vasya can achieve by changing no more than k characters.

    Examples

    Input
    4 2
    abba
    Output
    4
    Input
    8 1
    aabaabaa
    Output
    5

    Note

    In the first sample, Vasya can obtain both strings "aaaa" and "bbbb".

    In the second sample, the optimal answer is obtained with the string "aaaaabaa" or with the string "aabaaaaa".

    理解:尺取法也称作双指针法,我更喜欢称之为追赶法,所谓追赶法呢,就是一个R在前面右移,L在限制K内进行追赶。也就是当R右移到某个位置时不满足K,那么就右移L使 【L,R】区间满足限制K,秉着这样的想法,来更新满足题意的区间。下面表格给出本题的手动模拟过程,就本题而言,还可以采用前缀和。

     

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <map>
     7 #include <set>
     8 #include <list>
     9 #include <deque>
    10 #include <queue>
    11 #include <stack>
    12 #include <cstdlib>
    13 #include <cstdio>
    14 #include <cmath>
    15 #include <iomanip>
    16 #define ull unsigned long long
    17 #define ll long long
    18 #define pb push_back
    19 #define rep(i,start,end) for(int i=start;i<=end;i++)
    20 #define per(i,end,start) for(int i=end;i>=start;i--)
    21 #define tle ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    22 #define lc now<<1
    23 #define rc now<<1|1
    24 using namespace std;
    25 const int mod = 998244353;
    26 const int mxn = 1e6 +7;
    27 ll _,n,m,t,k,u,v,ans,cnt,ok,lim;
    28 ll w[mxn] , cost[mxn] ,  far[mxn] , siz[mxn];
    29 string str ;
    30 double dp[11][11] ;
    31 int main()
    32 {
    33     while(cin>>n>>k>>str)
    34     {
    35         char ch = 'a';
    36         int l = 0 , ans = 0 , ok = 0 ;
    37         for(int i=0;i<str.size();i++)
    38         {
    39             if(str[i]==ch)
    40             {
    41                 if(ok<k) ok++; /// 先在限制内一直右移,直到达到最大限制
    42                 else    ///将前指针右移一位,保持K个改变的限制
    43                 {
    44                     while(l<i && str[l]!= ch) l++;
    45                     l++;
    46                 }
    47             }
    48             ans = max(ans,i-l+1); /// 不断更新值
    49         }
    50         l = 0 ; ok = 0 ;ch = 'b' ;
    51         for(int i=0;i<str.size();i++)
    52         {
    53             if(str[i]==ch)
    54             {
    55                 if(ok<k) ok++;
    56                 else
    57                 {
    58                     while(l<i && str[l]!= ch) l++;
    59                     l++;
    60                 }
    61             }
    62             ans = max(ans,i-l+1);
    63         }
    64         cout<<ans<<endl;
    65     }
    66 }
    所遇皆星河
  • 相关阅读:
    201703-1 分蛋糕
    201812-2 小明放学
    201812-1 小明上学
    逆向_Easy_vb
    逆向_入门逆向
    代码审计_弱类型整数大小比较绕过
    代码审计_数组返回NULL绕过
    代码审计_md5()函数
    代码审计_urldecode二次编码绕过
    代码审计_extract变量覆盖
  • 原文地址:https://www.cnblogs.com/Shallow-dream/p/12838316.html
Copyright © 2011-2022 走看看