985的0-1串难题 [二分、尺取]
时间限制: 1 Sec 内存限制: 128 MB提交: 18 解决: 7 状态
题目描述
985有一个长度为的
串,已知他最多可以修改
次(每次修改一个字符即 或者 ),他想知道连续的全
子串最长是多少。
输入
第一行输入一个整数,代表有组测试数据。
每组数据第一行输入两个整数 分别代笔上面的信息。
每组数据第一行输入两个整数 分别代笔上面的信息。
1<=T<=12,1<=n<=100000,0<=k<=100000
输出
对每组测试数据,输出一个整数代表可以得到的最大长度。
样例输入
2
6 3
010100
6 2
010100
样例输出
5
4
取最长的串必定是连续的,简单dp一下就可以了
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
const int mod = 1e9+7;
int s[maxn];
int main(){
int t, n, k, ans, sum;
cin >> t;
while(t--){
cin >> n >> k;
char ch;
ans = 1;
sum = 0;
s[0] = 0;
for(int i = 1; i <= n; i++){
scanf(" %c", &ch);
if(ch == '0') s[ans++] = i;
}
s[ans] = n+1;
if(k >= ans) cout << n << endl;
else{
for(int i = k; i < ans; i++) sum = max(s[i+1]-s[i-k]-1, sum);
cout << sum << endl;
}
}
return 0;
}