|
|
вернуться в форумОбщий форум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 > > 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. |
|
|