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() |