# načtení a předzpracování vypadá stejně jako v předchozím řešení def je_zivy(mladych,starych): soucet_nahore = P[N-starych] - P[N-starych-K] soucet_dole = P[N-starych-K] - P[mladych] return soucet_nahore <= Q*soucet_dole + 1e-9 # ošetříme speciální případ, kdy turnaj končí prvním zápasem if not je_zivy(0,0): print(1) from sys import exit exit() odpoved = 0 for starych in range(0,N-K+1): if not je_zivy(0,starych): break # tolik či více starých hráčů už nelze odebrat lo, hi = 0, N-K-starych # binárně vyhledáváme -- invariant: lo mladých ještě můžeme odebrat, hi už ne while hi-lo > 1: med = (lo+hi)//2 if je_zivy(med,starych): lo = med else: hi = med odpoved = max( odpoved, lo+starych+2 ) print(odpoved)