updated on 2019-04-18
問題atCoder https://atcoder.jp/contests/abc124/tasks/abc124_d
N,K = gets.split.map(&:to_i)
S = gets.chomp
nums = []
num = "1"
count = 0
for i in 0..N-1 do
# 連続数カウント
if S[i] == num then
count+=1
else
# 連続数メモ&カウントのリセット&カウント数字の切り替え
nums.push(count)
count = 1
num = num == "1" ? "0" : "1"
end
end
# 最後まで行くと、それ以上連続しないのでカウントをメモ
nums.push(count)
# 1..0みたいに0で終わってたら1の連続数0を加える
if nums.length % 2 == 0
nums.push(0)
end
add = 2 * K + 1
left = 0
right = 0
tmp = 0
ans = 0
# 1の連続数は偶数ばんめのインデックス
0.step(nums.length-1, 2) do |i|
# 連続の一番左インデックス
# 連続の一番右インデックスの一個右
nextleft = i
nextright = [i + add, nums.length].min
# インデックス0から連続の左端手前まで引く
while nextleft > left
tmp -= nums[left]
left += 1
end
# インデックス0から連続の右端までたす
while nextright > right
tmp += nums[right]
right += 1
end
ans = tmp if tmp > ans
end
puts ans