Codeforces Round #354 (Div. 2) C

来源:互联网 发布:定向数据流量 编辑:程序博客网 时间:2024/05/19 23:18

题目:http://codeforces.com/contest/676/problem/C
题意:一个a、b的字符串,你可以更改有限个字符(<=k),得到最大的相同字符的子串
思路:二分
代码:

#include<bits/stdc++.h>using namespace std;const int N = 1e5+5;int sum[N];string s;int main(){    int n,k;    cin >> n >> k;    cin >> s;    for(int i = 0;i < n;i++)        sum[i+1] = sum[i] + (s[i] == 'b');    int maxn = 0;    for(int i = 1;i <= n;i++)    {        int l = i,r = n+1,mid;        while(r - l > 1)        {            mid = (l+r)>>1;            int tmp = sum[mid]-sum[i-1];            if(min(tmp,(mid-i+1)-tmp) <= k)                l = mid;            else                r = mid;        }        maxn = max(maxn,l-i+1);    }    cout << maxn << "\n";    return 0;}
原创粉丝点击