#!/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() |