ZZULI 1895: 985的0-1串难题
来源:互联网 发布:xp网络共享设置 编辑:程序博客网 时间:2024/04/29 15:53
1895: 985的0-1串难题Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 272 Solved: 81SubmitStatusWeb BoardDescription985有一个长度为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 Input26 30101006 2010100Sample Output54HINTSourcehpuSubmitStatusWeb Board
经典的二分题目
先打个表记录下来前i个有多少个0
然后二分查找最大的长度 如果查找在那个片断0的个数小于k满足如果大于k肯定不满足了
#include <cstdio> #include <iostream> using namespace std; const int MAXX=100000+10; char sr[MAXX]; int n,k; int num[MAXX]; int init(){ int i=0; if(sr[0]=='0') num[0]=1; for(i=1;i<n;i++){ if(sr[i]=='0') num[i]=num[i-1]+1; else num[i]=num[i-1]; } } bool judge(int mid){ int i=0; int j=0; for( i=mid-1 ,j=0 ; i<n ; i++,j++){ int temp=0; if(sr[j]=='0') temp++; if(num[i]-num[j]+temp<=k) return true; } return false; } int main(){ int T; scanf("%d", &T); while( T-- ){ scanf("%d %d",&n,&k); scanf("%s",sr); init(); int l = 0, r = n; int mid=0; int ans=0; while(l <= r){ mid=( l + r ) >> 1; if( judge(mid) ){ ans=mid; l=mid+1; } else{ r=mid-1; } } printf("%d\n",ans); } return 0; }
0 0
- ZZULI OJ 1895: 985的0-1串难题
- zzuli 1895 985的0-1串难题
- zzuli 1895 (985的0-1串难题)
- ZZULI 1895: 985的0-1串难题
- zzuli 1895: 985的0-1串难题(二分)
- zzuli oj1895: 985的0-1串难题 [二分]
- 【zzuli-oj】-1895-985的0-1串难题(思维,好)
- ZZuli oj 1895: 985的0-1串难题(二分+打表)
- ZZULI OJ 1898: 985的数字难题
- ZZULI OJ 1897: 985的红绿灯难题
- ZZULI OJ 1894: 985的方格难题
- zzuli 1899: 985的最大和难题
- zzuli 1893 985的数学难题
- zzuli 1899 985的最大和难题
- zzuli 1198 (985的数字难题)
- zzuli 1893 (985的数学难题)
- zzuli 1894 (985的方格难题)
- zzuli 1902 (985的因子对难题)
- c++笔试面试3
- javascript上机题
- android中的反射应用场景分析(map转化为bean工具)
- 仿饿了么等APP底部菜单(Fragment实现)
- ica 独立成分分析
- ZZULI 1895: 985的0-1串难题
- 使用Android Accessibility实现免Root自动批量安装功能
- Introducing Wire Protocol Buffers
- 在几秒后执行某方法
- 二叉树横向连接
- 随手敲代码——二分法
- sql 中 limit 与 limit,offset连用的区别
- 03章 面向对象编程
- Imageloader四种图片显示(圆形,淡入,圆角,修饰)代码分析