题目: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;
}