#!/usr/bin/python3
import sys
class RangeSum:
def __init__(self, nums):
self._pref_sums = [0]
s = 0
for num in nums:
s += num
self._pref_sums.append(s)
def sum(self, start=0, stop=-1):
return self._pref_sums[stop] - self._pref_sums[start]
def solve():
kOffice = '1'
kRemote = '2'
n, k, t = sys.stdin.readline().split()
agenda = sys.stdin.readline()
# print(n, k, t)
# print(agenda)
n, k, t = int(n), int(k), int(t)
office = RangeSum([1 if a == kOffice else 0 for a in agenda])
remote = RangeSum([1 if a == kRemote else 0 for a in agenda])
ans = -1
# Case 1: Stay at home.
if office.sum(0, n) <= k:
ans = n - max(0, remote.sum(0, n) - (k - office.sum(0, n)))
# print('case1:', ans)
# Case 2: Go to the office.
for i in range(n - 2 * t + 1):
missed_morning = office.sum(0, i + t) + remote.sum(i, i + t)
if missed_morning > k: continue
for j in range(i + t, n - t + 1):
missed_afternoon = office.sum(j, n) + remote.sum(j, j + t)
missed = missed_morning + missed_afternoon
if missed > k: continue
maybe = remote.sum(0, i) + remote.sum(j + t, n)
ans = max(ans, i + (n - j - t) - max(0, maybe - (k - missed)))
# print('case2:', i, j, ans)
print(ans)
if __name__ == "__main__":
solve()
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 50 51 52 53 54 55 56 | #!/usr/bin/python3 import sys class RangeSum: def __init__(self, nums): self._pref_sums = [0] s = 0 for num in nums: s += num self._pref_sums.append(s) def sum(self, start=0, stop=-1): return self._pref_sums[stop] - self._pref_sums[start] def solve(): kOffice = '1' kRemote = '2' n, k, t = sys.stdin.readline().split() agenda = sys.stdin.readline() # print(n, k, t) # print(agenda) n, k, t = int(n), int(k), int(t) office = RangeSum([1 if a == kOffice else 0 for a in agenda]) remote = RangeSum([1 if a == kRemote else 0 for a in agenda]) ans = -1 # Case 1: Stay at home. if office.sum(0, n) <= k: ans = n - max(0, remote.sum(0, n) - (k - office.sum(0, n))) # print('case1:', ans) # Case 2: Go to the office. for i in range(n - 2 * t + 1): missed_morning = office.sum(0, i + t) + remote.sum(i, i + t) if missed_morning > k: continue for j in range(i + t, n - t + 1): missed_afternoon = office.sum(j, n) + remote.sum(j, j + t) missed = missed_morning + missed_afternoon if missed > k: continue maybe = remote.sum(0, i) + remote.sum(j + t, n) ans = max(ans, i + (n - j - t) - max(0, maybe - (k - missed))) # print('case2:', i, j, ans) print(ans) if __name__ == "__main__": solve() |
English