zzuli 1895 (985的0-1串难题)
2016-08-09 19:49
519 查看
985的0-1串难题
每组数据第一行输入两个整数n,k分别代笔上面的信息。
注:1 <= t <= 12,1 <= n <= 100000,0 <= k <= 100000。
题解:就是求k个0之间的最大串长度。
思路:用cnt[ ]记录0的个数和位置,cnt首尾加上0,cnt[0]=0,cnt[ ]=n+1.判断时先比较k与0总数的大小。
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;//首位加0 for (i=0;i<n;i++){ if (s[i]=='0'){ cnt[pos++]=i+1;//pos为0的位置,i+1为0的个数 } } cnt[pos++]=n+1;//末位设为0 if (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串难题
- ZZULIOJ/ 郑轻OJ 1895: 985的0-1串难题(数学思维)
- zzuli 1895: 985的0-1串难题(二分)
- 【zzuli-oj】-1895-985的0-1串难题(思维,好)
- zzuli 1895 985的0-1串难题
- 【zzuliOJ】1895 - 985的0-1串难题(思维)
- 【多校训练】ZZULIOJ 1895 985的0-1串难题
- zzuliOJ 1895: 985的0-1串难题 【二分】
- 【zzulioj 1895 985的0-1串难题】
- ZZuli oj 1895: 985的0-1串难题(二分+打表)
- 1895: 985的0-1串难题(好题)
- zzuli oj1895: 985的0-1串难题 [二分]
- 1895: 985的0-1串难题
- 1895: 985的0-1串难题
- 【郑轻】[1895]985的0-1串难题
- ZZULI OJ 1895: 985的0-1串难题
- zzuliOJ 1895:985的0-1串难题(二分+打表)
- 郑轻 oj 1895: 985的0-1串难题
- zzulioj1895: 985的0-1串难题(思维)
- 985的0-1串难题