本文主要是介绍zzuli 1895 (985的0-1串难题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
985的0-1串难题
Description
985有一个长度为n的0-1串,已知他最多可以修改k次(每次修改一个字符即0->1 或者 1->0),他想知道连续的全1子串最长是多少。
Input
第一行输入一个整数t,代表有t组测试数据。
每组数据第一行输入两个整数n,k分别代笔上面的信息。
注:1 <= t <= 12,1 <= n <= 100000,0 <= k <= 100000。
Output
一个整数代表可以得到的最大长度。
Sample Input
2
6 3
010100
6 2
010100
Sample Output
5
4
题解:就是求k个0之间的最大串长度。
思路:用cnt[ ]记录0的个数和位置,cnt首尾加上0,cnt[0]=0,cnt[ ]=n+1.判断时先比较k与0总数的大小。
<span style="font-size:18px;">#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;int main(){int t,n,k,i;char s[101010];int cnt[101010];scanf ("%d",&t); while (t--){scanf ("%d %d",&n,&k);/* getchar();gets(s);gets()不能随便用,RE,因为gets()可以无限读取,不会判断上限,需要足够大的buffer */scanf ("%s",s);int pos=0;cnt[pos++]=0;//首位加0for (i=0;i<n;i++){if (s[i]=='0'){cnt[pos++]=i+1;//pos为0的位置,i+1为0的个数}}cnt[pos++]=n+1;//末位设为0if (k>=(pos-2))printf ("%d\n",n); else{int num=0; for (i=k+1;i<pos;i++){num=max(num,cnt[i]-cnt[i-k-1]-1);}printf ("%d\n",num);}}return 0;
} </span>
这篇关于zzuli 1895 (985的0-1串难题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!