def best_work_time(tab1, tab2, harmonogram, n, k, t):
shortest_time_at_work = n
start = -1
end = -1
missing_meetings = 0
for i in range(n-2*t+1):
for j in range(i+t, n-t+1):
if tab1[i] + tab2[j] > k:
continue
if j-i < shortest_time_at_work:
shortest_time_at_work = j-i
start = i
end = j
missing_meetings = tab1[i] + tab2[j]
return missing_meetings, start, end
def main():
n, k, t = map(int, input().split())
harmonogram = input().strip()
harmonogram = [int(cyfra) for cyfra in harmonogram]
tablica3 = [0] * n
tablica3[0] = sum(1 for i in range(t) if harmonogram[i] == 1 or harmonogram[i] == 2)
for p in range(1, n):
tablica3[p] = tablica3[p - 1]
if p + t - 1 < n and (harmonogram[p + t - 1] == 1 or harmonogram[p + t - 1] == 2):
tablica3[p] += 1
if p - 1 >= 0 and harmonogram[p - 1] == 2:
tablica3[p] -= 1
tablica4 = [0] * n
for p in range(n - 1, n - t, -1):
tablica4[p] = 0
tablica4[n - t] = sum(1 for i in range(n - t, n) if harmonogram[i] == 1 or harmonogram[i] == 2)
for p in range(n - t - 1, -1, -1):
tablica4[p] = tablica4[p + 1]
if harmonogram[p] == 1 or harmonogram[p] == 2:
tablica4[p] += 1
if p + t < n and harmonogram[p + t] == 2:
tablica4[p] -= 1
if harmonogram.count(1) > k:
missing_meetings, start, end = best_work_time(tablica3, tablica4, harmonogram, n, k, t)
twos_number = harmonogram[0:start].count(2) + harmonogram[end+t:n].count(2)
free_time = n - (end+t - start) - twos_number + (k-missing_meetings)
if start == -1:
free_time = -1
else:
ones_number = harmonogram.count(1)
twos_number = harmonogram.count(2)
leaved_meetingd = min(ones_number + twos_number, k)
free_time = n - ones_number - twos_number + leaved_meetingd
#print("harmonogram liczb:", harmonogram)
#print("Tablica 3: ", tablica3)
#print("Tablica 4: ", tablica4)
#print("Czas wolny: ", free_time)
print(free_time)
if __name__ == "__main__":
main()
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 57 58 59 60 61 62 63 64 65 66 67 | def best_work_time(tab1, tab2, harmonogram, n, k, t): shortest_time_at_work = n start = -1 end = -1 missing_meetings = 0 for i in range(n-2*t+1): for j in range(i+t, n-t+1): if tab1[i] + tab2[j] > k: continue if j-i < shortest_time_at_work: shortest_time_at_work = j-i start = i end = j missing_meetings = tab1[i] + tab2[j] return missing_meetings, start, end def main(): n, k, t = map(int, input().split()) harmonogram = input().strip() harmonogram = [int(cyfra) for cyfra in harmonogram] tablica3 = [0] * n tablica3[0] = sum(1 for i in range(t) if harmonogram[i] == 1 or harmonogram[i] == 2) for p in range(1, n): tablica3[p] = tablica3[p - 1] if p + t - 1 < n and (harmonogram[p + t - 1] == 1 or harmonogram[p + t - 1] == 2): tablica3[p] += 1 if p - 1 >= 0 and harmonogram[p - 1] == 2: tablica3[p] -= 1 tablica4 = [0] * n for p in range(n - 1, n - t, -1): tablica4[p] = 0 tablica4[n - t] = sum(1 for i in range(n - t, n) if harmonogram[i] == 1 or harmonogram[i] == 2) for p in range(n - t - 1, -1, -1): tablica4[p] = tablica4[p + 1] if harmonogram[p] == 1 or harmonogram[p] == 2: tablica4[p] += 1 if p + t < n and harmonogram[p + t] == 2: tablica4[p] -= 1 if harmonogram.count(1) > k: missing_meetings, start, end = best_work_time(tablica3, tablica4, harmonogram, n, k, t) twos_number = harmonogram[0:start].count(2) + harmonogram[end+t:n].count(2) free_time = n - (end+t - start) - twos_number + (k-missing_meetings) if start == -1: free_time = -1 else: ones_number = harmonogram.count(1) twos_number = harmonogram.count(2) leaved_meetingd = min(ones_number + twos_number, k) free_time = n - ones_number - twos_number + leaved_meetingd #print("harmonogram liczb:", harmonogram) #print("Tablica 3: ", tablica3) #print("Tablica 4: ", tablica4) #print("Czas wolny: ", free_time) print(free_time) if __name__ == "__main__": main() |
English