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