MWPZ - Mistrzostwa Wielkopolski w Programowaniu Zespolowym

Tutorial

Whoops

Po kolejnych poprawkach:

var
  d,n,i : longint;
  f : array[0..20000] of longint;

begin
  readln(d);
  while (d>0) do
  begin
    d:=d-1;
    readln(n);
    f[0]:=0; f[1]:=1;
    for i:=2 to n do f[i]:=f[i-1]+f[i-2];
    writeln(f[n] mod 10000);
  end;
end.

Wys³anie takiego programu spowoduje, ¿e Sprawdzarka zwróci ocenê:

Wrong Answer

Oznacza to, ¿e program wykona³ siê prawid³owo i nie przekroczy³ dopuszczalnego czasu, ale da³ z³± odpowied¼. W tym przypadku wkrad³ siê nam b³±d w implementacji (poprawnego) algorytmu. Z pozoru wygl±da wszystko dobrze, ale liczby Fibonacciego s± bardzo du¿e i ich reprezentacja nie zmie¶ci siê w typie longint, przez co "przekrêca siê licznik" i powstaj± bzdurne warto¶ci (powinni¶cie dowiedzieæ siê jakie ograniczenia maj± poszczególne typy). Je¿eli nie chcecie pisaæ w³asnej obs³ugi du¿ych liczb (a pewnie nie chcecie), to wystarczy, ¿e bêdziecie w tablicy f trzymaæ liczby Fibonacciego modulo 10000, zamiast pe³ne liczby i wykonywaæ operacjê modulo na samym koñcu.

Ten konkretny b³±d da siê wykryæ testuj±c program na swoim stanowisku na danych z tre¶ci zadania. Czêsto jednak bêdzie tak, ¿e na danych z tre¶ci (które zazwyczaj s± do¶æ proste) Wasz program bêdzie dzia³a³ poprawnie, a na testach na Sprawdzarce bêdzie dawa³ b³êdne wyniki. Zalecamy aby¶cie przed wys³aniem rozwi±zania do oceny przeprowadzili kilka w³asnych testów (choæ i to nie zawsze pomaga). W razie znalezienia danych wej¶ciowych, na których program dzia³a ¼le, przydatnym narzêdziem do wykrycia miejsca b³êdu mo¿e siê okazaæ debugger, ale zalecamy te¿ przemy¶lenie kodu programu. Mo¿ecie te¿ wys³aæ program do wydrukowania, tak aby szukaj±c b³êdów w swoim programie nie blokowaæ komputera pozosta³ym cz³onkom dru¿yny.

Uwaga! Wasz program mo¿e dzia³aæ nieprawid³owo nie tylko dlatego, ¿e pope³nili¶cie b³±d w implementacji, ale tak¿e dlatego, ¿e sam algorytm jest z³y. Zamiast szukaæ b³êdu w kodzie, zastanówcie siê, czy aby na pewno Wasz pomys³ na rozwi±zanie jest poprawny. Zastanówcie siê te¿ czy Wasz program bêdzie prawid³owo dzia³a³ dla wszystkich mo¿liwych przypadków szczególnych (np. najmniejszych mo¿liwych liczb). W³a¶nie fakt, i¿ program myli siê dla pewnych z³o¶liwych/szczególnych danych jest jedn± z czêstszych przyczyn oceny Wrong Answer.