Educational Codeforces Round 11 C (Two Pointers)
2016-04-18 18:23
330 查看
【题外话】我曾经用dp+二分写过这道题,当时是100多ms,今天了解到了two pointers这个东西,用two pointers的方法过了这道题!
【题意】这道题的意思是给了一个只包含0,1的这样一个串,然后一个数k,最多讲k个0变成1,问你可能得到的最大的1的连续区间长度,并且输出改变后的数组!由于0的个数,从前导后具有单调性,因此,我们可以采用two pointers这种方法!事实证明,这个复杂度接近O(n)
【AC代码】
【题意】这道题的意思是给了一个只包含0,1的这样一个串,然后一个数k,最多讲k个0变成1,问你可能得到的最大的1的连续区间长度,并且输出改变后的数组!由于0的个数,从前导后具有单调性,因此,我们可以采用two pointers这种方法!事实证明,这个复杂度接近O(n)
【AC代码】
#include <bits/stdc++.h> using namespace std; const int maxn = 300010; int a[maxn]; int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1; i<=n; i++) scanf("%d",&a[i]); int zero = 0; pair<int,int>ans={0,0}; for(int l=1,r=1; l<=n; ++l) { while(r<=n&&zero+!a[r]<=k) zero+=!a[r++]; ans = max(ans,{r-l,l}); zero -= !a[l]; } printf("%d\n",ans.first); for(int i=ans.second; ans.first--; i++)a[i]=1; for(int i=1; i<=n; i++)printf("%d ",a[i]); printf("\n"); } return 0; }
相关文章推荐
- 关于Java变量的可见性问题
- Android图片压缩终极解决方案,是的,终极,终极,终极
- 【iOS程序启动与运转】- RunLoop个人小结
- 深入理解CSS盒子模型
- 需要帮助啊
- iconv函数详细解释
- python类的详析
- dw在retrieve的时候就截取字符串
- Python中优化NumPy包使用性能的教程
- ionic build android Could not resolve com.android.tools.build:gradle:1.5.0
- 单例模式
- python文件夹遍历,文件操作,获取文件修改创建时间
- 二分图的判定
- 类图UML设计知识一
- Android平滑图片加载和缓存库 Glide 使用详解
- 怎样提高团队管理能力10
- 结对编程--fault,error,failure
- 初入nodeJs express框架
- 六款值得推荐的android(安卓)开源框架简介
- DML、DDL、DCL区别