逐 梦
github
github
ACM模版
数论
数据结构
字符串
dp
图论
计算几何
思维与算法
黑科技
快读
ACM题型
数论
数据结构
字符串
dp
图论
计算几何
思维与算法
黑科技
生成博客
阅题
生成博客二代
珍藏网站
gcc内建函数
数学公式
hzwer
桌面高清背景图片
友链
yg
zwg
wly
cf660C
链接
http://codeforces.com/problemset/problem/660/C
题意
给你长度为n的01串,最多把k个0变成1,变完后连续的最长的全是1的串的长度是多少,并且输出最后得串;
k<n<3e5
题解
暴力:
dp[i][j]代表前i个数把j个0变成1后,以位置i结尾的全为1的串长度最大是多少
不妨设串为s[1:n]
if s[i] = 0
dp[i][j] <---- dp[i-1][j-1]+1
if s[i] = 1
dp[i][j] <---- dp[i-1][j]+1
解法1:
套路,统计前缀0的个数,然后枚举每一个位置作为变完后的全为1的串的结尾,于是起点就可以二分了,
枚举终点i,则sum[i]-sum[j]<=k,sum具有单调性,于是二分
解法2(优化):
定义终点i对应的起点j为:
j=f(i)
f单调
可以用双指针扫描达到线性复杂度
博主蒟蒻 可以随意转载 但要附上本文链接
广告位招租