"""Sharper result for D=5: at least 8 pairs MUST be left uncovered. For ANY 5 balanced partitions (boats of size 6): sum_{x= 10 * 8 = 80 (forced) sum_{x=1). Write a=1+e on covered pairs, sum e = 300 - C. Constraint: sum e(e+1)/2 >= 80 => sum e^2 >= 160-(300-C) = C-140. Since e<=4: sum e^2 <= 4 sum e = 4(300-C). => C-140 <= 4(300-C) => 5C <= 1340 => C <= 268. So >= 276-268 = 8 pairs are uncovered with 5 days. """ from math import comb DAYS = 5 total_agreements = DAYS * 60 # sum of a_xy forced_double = 8 * comb(DAYS, 2) # lower bound on sum C(a,2) print(f"sum a_xy = {total_agreements}") print(f"forced sum C(a,2) >= {forced_double}") # solve for max C # C - 140 <= 4(300 - C) best_C = None for C in range(276, 0, -1): e_sum = total_agreements - C # = sum e need = forced_double * 2 - total_agreements + C # sum e^2 >= 160 - (300-C)? recompute # constraint: sum e^2 >= 2*forced_double - e_sum (since sum e(e+1)/2>=fd => sum e^2+sum e>=2fd) lhs_min_needed = 2 * forced_double - e_sum max_possible_e2 = 4 * e_sum # e<=4 if max_possible_e2 >= lhs_min_needed: best_C = C break print(f"max coverable pairs C = {best_C}") print(f"=> at least {276 - best_C} pairs uncovered with {DAYS} days (full cover impossible)")