program KingsField; var n, k, l : Integer; {Počet pater; počet vajec; počet pokusů} P, C : Integer; {Spočítaný max. počet pater; Predpočítané komb. číslo} nejmensi : Integer; {Nejnižší patro, ze kterého se vejce může rozbít} rozbilo : Integer; {Rozbilo se hodem vejce?} begin Write('Pocet pater:'); Read(n); Write('Pocet vajec:'); Read(k); l := 0; P := 1; C := 1; {v C bude uloženo (l nad k), pokud l>=k} while P < n+1 do begin {Najdeme minimální nutný počet pokusů} if l < k then {Dokud je dost vajec, půlíme} P := 2*P else begin P := 2*P - C; C := C*(l+1) div (l+1-k); {Přepočteme (l nad k) na (l+1 nad k)} end; Inc(l); end; nejmensi := 0; {Jdeme zkoušet hody} while l > 0 do begin P := (P-C+C*k div l) div 2; {Přepočteme P(k,l) na P(k-1,l-1)} Write('Hod vejce z patra ',nejmensi+P-1,'. Rozbilo se?'); Read(rozbilo); if rozbilo = 1 then begin C := C*k div l; {Prepočteme (l nad k) na (l-1 nad k-1)} Dec(k); {P už je správně přepočteno...} end else begin nejmensi := nejmensi + P; C := C*(l-k) div l; {Přepočteme (l nad k) na (l-1 nad k)} P := P + C; {Přepočteme P(k-1,l-1) na P(k,l-1)} end; Dec(l); end; if nejmensi = n then WriteLn('Vejce se nerozbije z zadneho patra.') else WriteLn('Vejce se rozbije z patra ',nejmensi,'.'); end.