ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Общий форум

Help! (1133) Why WA? Which test!!! (hell!!!)
Послано Aidar 17 фев 2002 20:08

var
  i, j, n : longint;
  p, t : longint;
  Fi, Fj, Ft : longint;
  g, x : extended;

function Fibonacci (k : longint) : extended;

var
  t, q, f : extended;

begin
  f := sqrt (5);
  t := (f + 1) / 2;
  q := exp (k * Ln (1 / t));
  if odd (k) then q := - q;
  Fibonacci := ((exp (k * Ln (t)) - q) / f);
end;

procedure Answer (What : extended);

begin
  Write (What:0:0);
  Halt;
end;

var
  Next : array [0..25000] of extended;


begin
  Read (i, Fi, j, Fj, n);
  if n = i then begin
    Answer (Fi);
  end;
  if n = j then begin
    Answer (Fj);
  end;
  if i > j then begin
    t := i;
    i := j;
    j := t;
    Ft := Fi;
    Fi := Fj;
    Fj := Ft;
  end;
  t := j - i;
  Next [0] := Fi;
  Next [1] := 0; Next [2] := Fi;
  for p := 3 to t do begin
    Next [p] := Next [p - 1] + Next [p - 2];
  end;
  x := round((Fj - Next [t]) / Fibonacci (t));
  if (n > i) and (n < j) then begin
    Answer (Next [n - i] + x * Fibonacci (n - i));
  end;
  if (n > j) then begin
    g := Next [t - 1];
    Next [1] := g + x * Fibonacci (t - 1);
    Next [2] := Fj;
    for p := j + 1 to n do begin
      Next [2 + p - j] := Next [1 + p - j] + Next [p - j];
    end;
    Answer (Next [2 + n - j]);
  end;
  if (n < i) then begin
    Next [1] := x; Next [2] := Fi;
    for p := i - 1 downto n do begin
      Next [2 + i - p] := Next [i - p] - Next [1 + i - p];
    end;
    Answer (Next [2 + i - n]);
  end;
end.
Re: I have always got WA until I used big number
Послано Tran Nam Trung (trungduck@yahoo.com) 17 фев 2002 20:20
>
> var
>   i, j, n : longint;
>   p, t : longint;
>   Fi, Fj, Ft : longint;
>   g, x : extended;
>
> function Fibonacci (k : longint) : extended;
>
> var
>   t, q, f : extended;
>
> begin
>   f := sqrt (5);
>   t := (f + 1) / 2;
>   q := exp (k * Ln (1 / t));
>   if odd (k) then q := - q;
>   Fibonacci := ((exp (k * Ln (t)) - q) / f);
> end;
>
> procedure Answer (What : extended);
>
> begin
>   Write (What:0:0);
>   Halt;
> end;
>
> var
>   Next : array [0..25000] of extended;
>
>
> begin
>   Read (i, Fi, j, Fj, n);
>   if n = i then begin
>     Answer (Fi);
>   end;
>   if n = j then begin
>     Answer (Fj);
>   end;
>   if i > j then begin
>     t := i;
>     i := j;
>     j := t;
>     Ft := Fi;
>     Fi := Fj;
>     Fj := Ft;
>   end;
>   t := j - i;
>   Next [0] := Fi;
>   Next [1] := 0; Next [2] := Fi;
>   for p := 3 to t do begin
>     Next [p] := Next [p - 1] + Next [p - 2];
>   end;
>   x := round((Fj - Next [t]) / Fibonacci (t));
>   if (n > i) and (n < j) then begin
>     Answer (Next [n - i] + x * Fibonacci (n - i));
>   end;
>   if (n > j) then begin
>     g := Next [t - 1];
>     Next [1] := g + x * Fibonacci (t - 1);
>     Next [2] := Fj;
>     for p := j + 1 to n do begin
>       Next [2 + p - j] := Next [1 + p - j] + Next [p - j];
>     end;
>     Answer (Next [2 + n - j]);
>   end;
>   if (n < i) then begin
>     Next [1] := x; Next [2] := Fi;
>     for p := i - 1 downto n do begin
>       Next [2 + i - p] := Next [i - p] - Next [1 + i - p];
>     end;
>     Answer (Next [2 + i - n]);
>   end;
> end.