var s:integer;finish,steps:integer;begin steps:=0;readln(s);readln(finish);while (s*2 < finish) do begin if ((s*2) >= finish) then s:= s*2 else if (s*2+1 < finish) and (s*2*2 < finish) then s:=s*2 else s:=s+1; inc(steps);end;writeln(steps);end.
Объяснение:
Программа играет по оптимальной стратегии, тогда и только тогда когда выигрывает, а когда проигрывает она играет не по оптимальной стратегии, но это не мешает ей принимать решения. Думайте головой не делайте, того чего не следует и победите за указанное количество шагов.