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

Обсуждение задачи 1001. Обратный корень

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