x = input().split(" ") n, k, t = int(x[0]), int(x[1]), int(x[2]) tab = [int(x) for x in input()] prefix_tab_12 = [0] for i in range(n): prefix_tab_12.append(prefix_tab_12[-1] + (1 if (tab[i] == 2 or tab[i] == 1) else 0)) prefix_tab_12.append(0) prefix_tab_1 = [0] for i in range(n): prefix_tab_1.append(prefix_tab_1[-1] + (1 if (tab[i] == 1) else 0)) prefix_tab_1.append(0) prefix_tab_3 = [0] for i in range(n): prefix_tab_3.append(prefix_tab_3[-1] + (1 if (tab[i] == 3) else 0)) prefix_tab_3.append(0) m = -1 if prefix_tab_12[n] <= k: print(n) exit(0) ct1 = prefix_tab_1[n] if ct1<=k: print(prefix_tab_3[n]+k) exit(0) for i in range(n-2*t+1): for j in range(i+t,n-t+1): if i+t>n: continue if j+t>n: continue if i+t>j: continue if prefix_tab_12[i+t]-prefix_tab_12[i] + prefix_tab_12[j+t]-prefix_tab_12[j]+prefix_tab_1[i]+prefix_tab_1[n] - prefix_tab_1[j+t]>k: continue missed_ = prefix_tab_12[i+t]-prefix_tab_12[i] + prefix_tab_12[j+t]-prefix_tab_12[j] possible_to_miss = k-missed_ missed_at_home = min(possible_to_miss, prefix_tab_12[i]+prefix_tab_12[n]-prefix_tab_12[j+t]) if prefix_tab_3[i]+prefix_tab_3[n] - prefix_tab_3[j+t]+missed_at_home>m: m = prefix_tab_3[i]+prefix_tab_3[n] - prefix_tab_3[j+t]+missed_at_home break print(m)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | x = input().split(" ") n, k, t = int(x[0]), int(x[1]), int(x[2]) tab = [int(x) for x in input()] prefix_tab_12 = [0] for i in range(n): prefix_tab_12.append(prefix_tab_12[-1] + (1 if (tab[i] == 2 or tab[i] == 1) else 0)) prefix_tab_12.append(0) prefix_tab_1 = [0] for i in range(n): prefix_tab_1.append(prefix_tab_1[-1] + (1 if (tab[i] == 1) else 0)) prefix_tab_1.append(0) prefix_tab_3 = [0] for i in range(n): prefix_tab_3.append(prefix_tab_3[-1] + (1 if (tab[i] == 3) else 0)) prefix_tab_3.append(0) m = -1 if prefix_tab_12[n] <= k: print(n) exit(0) ct1 = prefix_tab_1[n] if ct1<=k: print(prefix_tab_3[n]+k) exit(0) for i in range(n-2*t+1): for j in range(i+t,n-t+1): if i+t>n: continue if j+t>n: continue if i+t>j: continue if prefix_tab_12[i+t]-prefix_tab_12[i] + prefix_tab_12[j+t]-prefix_tab_12[j]+prefix_tab_1[i]+prefix_tab_1[n] - prefix_tab_1[j+t]>k: continue missed_ = prefix_tab_12[i+t]-prefix_tab_12[i] + prefix_tab_12[j+t]-prefix_tab_12[j] possible_to_miss = k-missed_ missed_at_home = min(possible_to_miss, prefix_tab_12[i]+prefix_tab_12[n]-prefix_tab_12[j+t]) if prefix_tab_3[i]+prefix_tab_3[n] - prefix_tab_3[j+t]+missed_at_home>m: m = prefix_tab_3[i]+prefix_tab_3[n] - prefix_tab_3[j+t]+missed_at_home break print(m) |