решите задачку с прошлой олимпиады, на языке pascal abc.net

Решите задачу с прошлой олимпиады, на языке pascal abc.net

Задать свой вопрос
1 ответ
Для небольших значений k полностью подойдет очередь.

var i,n,k,lf,rt,bg,nd: integer;
    a: array[1..50000] of integer;
begin
  write('N = ');  readln(n);
  write('K = ');  readln(k);
  for i:=1 to 50000 do a[i]:=0;
  bg:=1;  nd:=1;
  a[bg]:=n;
  repeat
    n:=a[bg];
    if n mod 2 = 0 then lf:=(n div 2)-1 
    else lf:=n div 2;
    if n mod 2 = 0 then rt:=lf+1
    else rt:=lf;
    inc(nd);
    a[nd]:=rt;  inc(nd);
    a[nd]:=lf;
    inc(bg);
    dec(k);
    if ndgt;49500 then 
    begin
      writeln('очень большое k');
      exit;
    end;  
  until k=0;
  writeln(lf,' ',rt);
end.  


N = 12456987
K = 23198
379 379

N = 20
K = 4
2 2

N = 20
K = 5
1 2









Олеся Базиленко
Программка работает не правильно.
Ева
В очереди длины отрезков не упорядочены по убыванию.
Михон
Задачка еще животрепещуща? Есть вариант решения, время 0,1 сек при n порядка 10^18. N = 987456321753159428K = 5247896235428861218 218время работы программки: 100 мск.
Кирилл Серебриев
да
Санек Серухин
полностью
Кристина
Вы в контакте (VK) есть?
Валентина
Решение зафиксировано, не корректируется, в комментарии не войдет по длине, мой id в контакте id462257808.
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт