ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1001. Reverse Root

Почему выдает неправильный ответ?
Posted by Alexandr 30 Jan 2016 18:08
Решал на паскале по инструкции http://acm.timus.ru/help.aspx?topic=pascal
Вот код.
var
i :integer;
   a: int64;
   b:array[1..100] of real;
begin
{$IFNDEF ONLINE_JUDGE}
i:=1;
  assign(input, 'input.txt');
   reset(input);
   assign(output, 'output.txt');
   rewrite(output);
   {$ENDIF}
while not seekeof(input) do
begin
read(a);
b[i]:=Sqrt(a);
i:=i+1;
end;

   for i:=i-1 downto 1 do
   writeln(b[i]:1:4);
   {$IFNDEF ONLINE_JUDGE}
   close(input);
   close(output);
   {$ENDIF}
end.
Отправляю на сайт - выдает Wrong answer.
Re: Почему выдает неправильный ответ?
Posted by Jane Soboleva (SumNU) 30 Jan 2016 20:12
Как минимум — фраза «Размер входного потока не превышает 256 КБ.» означает, что там может быть намного больше, чем 100 чисел.
Ну и ещё для олимпиадных задач лучше всегда использовать extended, а не real.
И вместо seekeof(input) можно просто eof.
И вместо :1:4 можно по идее и :0:4 (но не обязательно)
UPD: а, и самое-самое главное упустила — i:=1 внутри IFNDEF'a. То есть на сервере эта команда не выполнится, и i будет нулём. Вынести i:=1 за пределы, и переобъявить массив, скажем, как array[1..1000000] of extended, и будет AC.

Edited by author 30.01.2016 20:24
Re: Почему выдает неправильный ответ?
Posted by Alexandr 30 Jan 2016 21:35
Тем не менее редактирование к результату не привело. А что вообще за IFNDEF? Я о нем ранее не слышал.
Re: Почему выдает неправильный ответ?
Posted by Jane Soboleva (SumNU) 30 Jan 2016 21:47
Поздравляю с AC.
Как описано в руководстве, ONLINE_JUDGE — директива компилятора, с которой на сервере запускаются решения. Соответственно, есть IFDEF (if defined, если определена) и IFNDEF (if not defined, если не определена). То есть {$IFNDEF ONLINE_JUDGE} ... {$ENDIF} означает, что если не определена директива ONLINE_JUDGE, то есть вы исполняете программу у себя дома (и конечно же не прописали эту директиву в компилятор), то будет исполняться код в этом блоке. В частности, это делается для того, чтобы у себя на компьютере писать код, читающий данные из файла, а на сервере — из стандартного ввода-вывода.