|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.05.2009, 18:07 | #1 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
Погоня
Арагорн, Леголас и Гимли преследовали отряд Урук-Хайцев, подосланных Саруманом. Друзья уже преодолели K лиг (K < 20). На i-м участке пути длиной в 1 лигу (1 ≤ i ≤ K) средняя скорость бега составляла Vi лиг в час. Vi < Vj при i > j. Гимли заметил, что с начала погони прошло M/N часов и пора бы уже догнать этих Урук-Хайцев. Найдите K, если известно, что все Vi — целые.
Исходные данные В первой строке даны взаимно простые числа M и N (1 ≤ M, N ≤ 50; M/N ≤ 3). Результат В первой строке выведите число K, во второй строке — числа Vi (1 ≤ i ≤ K) через пробел. Учтите, что никто в Средиземье не может перемещаться со скоростью больше, чем 100000 лиг в час. Если существует множество решений, выведите любое. Если решения нет, выведите −1. |
13.05.2009, 20:27 | #2 | |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
Цитата:
I am the First of Cyber Evolution...
I am the First to Program your Future... |
|
13.05.2009, 22:36 | #3 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
есть еще добрые преподаватели))
|
13.05.2009, 22:44 | #4 | |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
Цитата:
Nobody expects Spanish Inquisition!
|
|
13.05.2009, 22:45 | #5 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
вот наработка
var n,m,i,u:integer; a:array[0..10000]of integer; procedure Sort(L,R:Longint); var j,x,buf:longint; begin i:=L; j:=R; X:=a[(i+j)shr 1]; repeat while a[i]<X do inc(i); while a[j]>X do dec(j); if i<=j then begin buf:=a[i]; a[i]:=a[j]; a[j]:=buf; inc(i); dec(j); end; until i>j; if i<R then Sort(i,R); if j>L then Sort(L,j); end; begin readln(n,m); u:=1; if (n=1)or(n=m) then begin writeln('1'); write(m); end else begin while m<=100000 do begin if n=2 then begin n:=n*2; m:=m*2; end; a[u]:=m; if m mod (n-1) <>0 then begin dec(n); n:=n*2; m:=m*2; end else begin a[0]:=m div (n-1); break; end; inc(u); end; if m>100000 then write('-1') else begin sort(0,u); writeln(u+1); for i:=u downto 0 do if i=0 then write(a[i]) else write(a[i],' '); end; end; readln; readln; end. |