Сообщение | Кратко | Сообщается ли номер теста? | Значение вердикта | Возможная причина |
---|---|---|---|---|
OK | OK | Нет | Решение зачтено | Программа верно работает на соответствующем наборе тестов |
Compilation error | CE | Нет | Компиляция программы завершилась с ошибкой | 1. в программе допущена синтаксическая или семантическая ошибка 2. неправильно указан язык |
Wrong answer | WA | Да | Ответ неверен | 1. ошибка в программе 2. неверный алгоритм |
Presentation error | PE | Да | Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи | 1. неверный формат вывода 2. программа не печатает результат 3. лишний вывод |
Time-limit exceeded | TL | Да | Программа превысила установленный лимит времени | 1. ошибка в программе 2. неэффективное решение |
Memory limit exceeded | ML | Да | Программа превысила установленный в условиях лимит памяти | 1. ошибка в программе (например, бесконечная рекурсия) 2. неэффективное решение |
Output limit exceeded | OL | Да | Программа превысила установленный в условиях лимит вывода | 1. программа выводит больше информации, чем установлено в ограничениях |
Run-time error | RE | Да | Программа завершила работу с ненулевым кодом возврата | 1. ошибка выполнения 2. программа на C или C++ не завершается оператором return 0 3. ненулевой код возврата указан явно 4. Программа на Java описана в пакете |
Precompile check failed | PCF | Нет | Программа не прошла проверку на качество кода перед компиляцией | 1. плохое качество кода 2. неправильно отформатированный код |
Idleness limit exceeded | IL | Да | Программа слишком долго не отвечала на запросы системы и не выполняла действий | 1. программа ожидает ввода с консоли, которого не должно быть 2. не использован flush() |
Сообщение | Кратко | Сообщается ли номер теста? | Значение вердикта | Возможная причина |
---|---|---|---|---|
OK | OK | Нет | Решение зачтено | Программа верно работает на соответствующем наборе тестов |
Compilation error | CE | Нет | Компиляция программы завершилась с ошибкой | 1. в программе допущена синтаксическая или семантическая ошибка 2. неправильно указан язык |
Wrong answer | WA | Да | Ответ неверен | 1. ошибка в программе 2. неверный алгоритм |
Presentation error | PE | Да | Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи | 1. неверный формат вывода 2. программа не печатает результат 3. лишний вывод |
Time-limit exceeded | TL | Да | Программа превысила установленный лимит времени | 1. ошибка в программе 2. неэффективное решение |
Memory limit exceeded | ML | Да | Программа превысила установленный в условиях лимит памяти | 1. ошибка в программе (например, бесконечная рекурсия) 2. неэффективное решение |
Output limit exceeded | OL | Да | Программа превысила установленный в условиях лимит вывода | 1. программа выводит больше информации, чем установлено в ограничениях |
Run-time error | RE | Да | Программа завершила работу с ненулевым кодом возврата | 1. ошибка выполнения 2. программа на C или C++ не завершается оператором return 0 3. ненулевой код возврата указан явно 4. Программа на Java описана в пакете |
Precompile check failed | PCF | Нет | Программа не прошла проверку на качество кода перед компиляцией | 1. плохое качество кода 2. неправильно отформатированный код |
Idleness limit exceeded | IL | Да | Программа слишком долго не отвечала на запросы системы и не выполняла действий | 1. программа ожидает ввода с консоли, которого не должно быть 2. не использован flush() |
Yandex Contest
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
Инструкция
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
x = 123 print(x) # Ошибка будет здесь, т.к. перед print стоят лишние отступы
Также ошибка будет в таком фрагменте:
x = 1 if x==1: print("One") else: print("Else") # Ошибка будет здесь, т.к. во всех блоках программы должно быть одинаковое # количество отступов, здесь внутри else перед print используется 1 отступ, хотя # ранее после if перед print использовалось 4 отступа
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода:
print('str'
,print('123)
и т.д. - Проверьте наличие двоеточия после строчки с
if, else, for, while
(if x>y:
).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print()
, чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах
input()
илиprint()
, т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок.
Т.е. не нужно писатьinput(“Введите число: ”)
илиprint(“Искомый результат: ”, res)
(здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать простоinput()
илиprint(res)
.
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки.
При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек (
numpy
,pandas
,math
,fractions
,itertools
и др.) не забывайте делать соответствующийimport
:
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е.
Print()
иprint()
– это разные функции). Например,2^3
– неверная запись операции возведения в степень (нужно2**3
). Аналогично,Print('string')
– неверно, т.к. написано с большой буквы (верноprint('string')
). - Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция
write()
принимает только одну строку в отличие отprint()
(который принимает сколько угодно параметров, а также именованные параметры вродеsep
иend
). Также функцияfloat()
принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. записьfloat("3,14")
приведёт к ошибке (нужноfloat("3.14")
). - Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для
lst=[1, 2, 3]
обращениеlst[500]
вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаряd = {‘cat’: 3, ‘lion’: 2, ‘dog’: 7}
вызовет ошибку обращениеd[‘mouse’]
(т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Решаю вот эту задачу(пробный контест):
A. Быстрый старт
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
В этом году третий раз одна известная компания проводит соревнование по программированию искусственного интеллекта для игровых стратегий. В этот раз участникам предложили написать искусственный интеллект для управления командой хоккеистов. Вася решил побороться за главный приз. Прочитав раздел “Быстрый старт”, он приступил к делу. Не прошло и нескольких часов, как хоккеисты начали ездить за шайбой по площадке. Но Вася заметил, что не всегда у игрока получается взять шайбу. Перечитав внимательно документацию, он выяснил, что для расчета вероятности подобрать шайбу нужно подсчитать коэффициент, равный максимальному значению из двух характеристик хоккеиста — ловкости D и подвижности A. Помогите Васе по известным значениям ловкости и подвижности определить этот коэффициент.
Формат ввода
Во входном файле заданы два целых числа D и A (0 ≤ D, A ≤ 109) — ловкость и подвижность хоккеиста соответственно.
Формат вывода
В выходной файл выведите коэффициент
Пример 1
Ввод Вывод
100 64 100
Пример 2
Ввод Вывод
31 14 31
Код:
Python | ||
|
выводит ошибку Run-time error
хотя при проверке вроде все работало
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Yandex Contest
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
Инструкция
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
x = 123 print(x) # Ошибка будет здесь, т.к. перед print стоят лишние отступы
Также ошибка будет в таком фрагменте:
x = 1 if x==1: print("One") else: print("Else") # Ошибка будет здесь, т.к. во всех блоках программы должно быть одинаковое # количество отступов, здесь внутри else перед print используется 1 отступ, хотя # ранее после if перед print использовалось 4 отступа
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода:
print('str'
,print('123)
и т.д. - Проверьте наличие двоеточия после строчки с
if, else, for, while
(if x>y:
).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print()
, чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах
input()
илиprint()
, т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок.
Т.е. не нужно писатьinput(“Введите число: ”)
илиprint(“Искомый результат: ”, res)
(здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать простоinput()
илиprint(res)
.
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки.
При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек (
numpy
,pandas
,math
,fractions
,itertools
и др.) не забывайте делать соответствующийimport
:
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е.
Print()
иprint()
– это разные функции). Например,2^3
– неверная запись операции возведения в степень (нужно2**3
). Аналогично,Print('string')
– неверно, т.к. написано с большой буквы (верноprint('string')
). - Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция
write()
принимает только одну строку в отличие отprint()
(который принимает сколько угодно параметров, а также именованные параметры вродеsep
иend
). Также функцияfloat()
принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. записьfloat("3,14")
приведёт к ошибке (нужноfloat("3.14")
). - Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для
lst=[1, 2, 3]
обращениеlst[500]
вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаряd = {‘cat’: 3, ‘lion’: 2, ‘dog’: 7}
вызовет ошибку обращениеd[‘mouse’]
(т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Тренируюсь решать задачи Яндекса.
Вот условие:
Дан упорядоченный по неубыванию массив целых 32-разрядных чисел. Требуется удалить из него все повторения.
Желательно получить решение, которое не считывает входной файл целиком в память, т.е., использует лишь константный объем памяти в процессе работы.
Первая строка входного файла содержит единственное число n, n ≤ 1000000.
На следующих n строк расположены числа — элементы массива, по одному на строку. Числа отсортированы по неубыванию.
У меня возникает Runtime error, а из-за чего — не могу понять. Не сказано же какая. В чём может быть проблема?
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class WooHoo {
public static void main(String[] args) throws Exception {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(r.readLine());
int prev = Integer.parseInt(r.readLine());
System.out.println(prev);
for (int i = 1; i < n; i++) {
int cur = Integer.parseInt(r.readLine());
if (prev == cur) {
continue;
} else {
prev = cur;
System.out.println(cur);
}
}
}
}
Содержание
- Работа с тестирующей системой, расшифровка сообщений. «Задача A+B» на разных языках
- Задача «A+B» на разных языках программирования
- Pascal
- Delphi
- Сообщения тестирующей системы
- Компиляторы
- Примеры ошибок в решениях:
- Presentation Error (PE)
- Wrong Answer (WA)
- Compile Error (CE)
- Runtime Error (RE)
- Time Limit (TL)
- Memory Limit (ML)
- presentation error. Не могу найти причину ошибки в своём коде.
- Проверка решения
- Задачи с автоматической проверкой
- Задачи с ручной проверкой
- Все решения
- Фильтрация
- Статусы задач
- Проверка на плагиат
- Проверка решения
- Задачи с автоматической проверкой
- Задачи с ручной проверкой
- Все решения
- Фильтрация
- Статусы задач
- Проверка на плагиат
Работа с тестирующей системой, расшифровка сообщений. «Задача A+B» на разных языках
Тестирующая система TestSys расположена по адресу: ts.lokos.net.
Для входа в систему следует использовать логин (обычно — 2 цифры) и пароль выданные преподавателем.
Задача «A+B» на разных языках программирования
Нужно ввести из входного файла два целых числа и вывести их сумму в выходной файл.
Pascal
Delphi
Сообщения тестирующей системы
- Accepted— Все в порядке! Ваша программа принята! Она откомпилировалась без ошибок и прошла все тесты.
- Presentation Error (PE) — неправильный формат вывода, проверяющая программа не смогла прочитать ваш выходной файл или ваша программа вообще не создала выходной файл.
- Wrong Answer (WA)— неправильный ответ на тест.
- Compile Error (CE) — ошибки компиляции программы. Посмотрите что вы отправляете (нажмите view в отправках).
- Runtime Error (RT) — ошибка времени выполнения (выход за границы массива, переполнение переменной, деление на ноль, корень из отрицательного числа, ошибка в имени входного файла).
- Time Limit (TL) — ваша программа выполнялась на каком-то тесте больше времени по условию задачи.
- Memory Limit (ML) — ваша программа использовала больше памяти, чем разрешено по условию задачи.
Компиляторы
- Pascal: Borland Delphi 7.0, Free Pascal 2.6.0;
- C/C++: Visual C++ 2010 Express Edition, GNU C++ 4.6.1 (MinGW), Code::Blocks 10.05;
- C#: Visual C# 2010 Express Edition;
- Java: Sun JDK 7 update 9, Eclipse 4.2.
- Python: Python 3.3.0, Wing IDE 101 4.1.9.
Примеры ошибок в решениях:
Presentation Error (PE)
Неправильное имя выходного файла:
Программа выводит на экран вместо файла:
Wrong Answer (WA)
Точности/разрядности типов данных не хватает:
Compile Error (CE)
Комментарий тестирующей системы:
Runtime Error (RE)
Программа завершилась с ненулевым кодом возврата, либо создала исключительную ситуацию (exception) и не обработала ее.
Для поиска RE в программе на Delphi используйте директивы:
Time Limit (TL)
Программа не завершилась за отведенный период времени.
Возможные причины:
- Неэффективное решение;
- Ошибка в программе (например, зацикливание).
Memory Limit (ML)
Программа попыталась использовать больше памяти, чем разрешается.
Источник
presentation error. Не могу найти причину ошибки в своём коде.
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
1 13
5 3 1 3 5 2 5 3 1 3 5 2 56
#include
using namespace std;
int main() <
int n, x;
cin >> n;
int *p = new int[n + 1];
for (int i = 0; i > *(p + i); >
p[n] = ‘’;
for (int i = 1; i Лучший ответ
int main() <
int n, len;
cin >> n;
for (int i = 0; i > numbers[i]; >
Источник
Проверка решения
Задачи с автоматической проверкой
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
В правой части экрана появится окно с подробными результатами автоматической проверки.
Задачи с ручной проверкой
Для некоторых задач с ручной проверкой предусмотрен набор предварительных тестов. Вам останется проверить, например, использует ли ученик нужные конструкции или не списывают ли в группе.
Часть решений, например в творческих задачах, нужно полностью проверять вручную.
Ученику будет назначено максимальное количество баллов за задачу.
По умолчанию указано максимально возможное количество баллов.
Все решения
Вы можете посмотреть все решения, которые отправили ученики, на вкладке Решения . Последние попытки решений отображаются в начале списка.
Фильтрация
Статусы задач
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Проверка на плагиат
Каждая попытка решения задачи проходит проверку на плагиат. Проверка происходит автоматически, попытка ученика сравнивается с попытками решения той же задачи других учеников Лицея Академии Яндекса.
Если подозрение на плагиат есть, рядом с номером решения появляется значок .
Чтобы проверить попытку на плагиат:
Проверка решения
Задачи с автоматической проверкой
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
В правой части экрана появится окно с подробными результатами автоматической проверки.
Задачи с ручной проверкой
Для некоторых задач с ручной проверкой предусмотрен набор предварительных тестов. Вам останется проверить, например, использует ли ученик нужные конструкции или не списывают ли в группе.
Часть решений, например в творческих задачах, нужно полностью проверять вручную.
Ученику будет назначено максимальное количество баллов за задачу.
По умолчанию указано максимально возможное количество баллов.
Все решения
Вы можете посмотреть все решения, которые отправили ученики, на вкладке Решения . Последние попытки решений отображаются в начале списка.
Фильтрация
Статусы задач
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Проверка на плагиат
Каждая попытка решения задачи проходит проверку на плагиат. Проверка происходит автоматически, попытка ученика сравнивается с попытками решения той же задачи других учеников Лицея Академии Яндекса.
Если подозрение на плагиат есть, рядом с номером решения появляется значок .
Источник
Разве вы не ненавидите, когда вы пытаетесь запустить программу и получаете сообщение об ошибке «Ошибка выполнения»? К сожалению, несмотря на то, что люди регулярно раздражают, ужасная ошибка времени выполнения не очень хорошо объясняет сама себя и то, что именно произошло.
Ошибки времени выполнения бывают разных форм и размеров, и они печально известны тем, что мешают вашему рабочему процессу. Таким образом, вот некоторые из наиболее распространенных ошибок времени выполнения, их причины и способы их устранения.
Что такое ошибки во время выполнения?
Ошибка выполнения возникает в программе, пока она выполняется. Ошибки времени выполнения определяются тем, как они возникают после компиляции программы, а не во время разработки программы. Ошибки времени выполнения разочаровывают тем, что они могут привести к неожиданному завершению работы программы, и иногда бывает трудно определить единственную причину.
Различные типы ошибок времени выполнения
Во время выполнения могут возникать несколько различных типов ошибок, поэтому рекомендуется узнать, что они из себя представляют и что их вызывает. Таким образом, вы будете точно знать, что делать, когда кто-то поднимает свою уродливую голову.
1. Ошибка деления на ноль
Ваш компьютер выполняет много математических операций при обработке данных, а это означает, что ошибки могут возникать даже при выполнении простых арифметических действий. Например, одна распространенная ошибка времени выполнения называется ошибкой «Делить на ноль». Этот симпатичный на носу; это происходит, когда ваш компьютер производит вычисления и пытается разделить число на 0.
Когда вы пытаетесь разделить число на 0, вы получите неопределенное число. Когда компьютер делает это, он не знает, что делать с неопределенным числом, и вызывает сбой программы.
К сожалению, это не та ошибка, которую вы можете решить на своей стороне. Если вы обнаружите ошибку деления на ноль, лучше всего обратиться к разработчику программного обеспечения.
2. Ошибки, вызванные неполной установкой
Иногда в процессе установки что-то идет не так. Существует множество причин, по которым программа не устанавливается должным образом, и когда это происходит, это может привести к проблемам.
Иногда некоторые файлы не устанавливаются или в установочном пакете есть ошибки. В любом случае, если программа не установлена должным образом, определенные файлы, которые ей необходимо запустить, могут не существовать, что приведет к ошибке выполнения. В этом случае лучше всего переустановить программу или попробовать найти другую версию установочного пакета.
3. Логические ошибки в программировании программного обеспечения.
Независимо от того, насколько хорош программист, всегда возникают случайные ошибки. Логическая ошибка — это тип ошибки времени выполнения, который может указывать на ошибку в кодировании.
По теме: Типы ошибок программирования и как их избежать
Горячий ответ: кодирование — это довольно сложно. Существуют тысячи и тысячи символов, которые необходимо правильно ввести для правильной работы программы. Если в коде есть опечатки, это может привести к неожиданным результатам. Из-за этого программа может глючить или даже вообще вылетать.
Лучше всего обратиться к разработчику программного обеспечения. Вы также должны проверить, используете ли вы самую последнюю версию программного обеспечения. В более поздней версии проблема может быть решена.
4. Ошибки, вызванные утечками памяти.
Еще одна довольно распространенная ошибка времени выполнения — ошибка утечки памяти. Когда программа запущена, она использует часть оперативной памяти. Затем, когда программа завершается, она сообщает системе, что она завершена, и освобождает эту оперативную память, чтобы другие программы могли ее использовать. Однако иногда программа этого не делает, и программы продолжают использовать новую оперативную память, пока она не закончится.
Связанный: Как устранить нехватку оперативной памяти или утечки памяти в Windows
Представьте себе жилой комплекс с 10 квартирами, восемь из которых заняты. Если трое жильцов уезжают, не сообщив об этом руководству квартиры, офис считает, что восемь квартир все еще заняты, когда заняты только пять. Затем, когда еще три человека хотят переехать, офис отказывает одному человеку, полагая, что для него нет места.
Утечка памяти может привести к проблемам с ОЗУ, снижению производительности и сбоям программы. В этом случае хорошим решением будет перезагрузка компьютера. Это полностью очистит всю оперативную память.
5. Ошибка ненулевого статуса выхода.
Программное обеспечение состоит из множества строк кода. Каждая линия должна функционировать должным образом, чтобы все работало бесперебойно. К сожалению, бывают случаи, когда линия работает не так, как должна, что приводит к ошибкам.
Одна такая ошибка называется ошибкой ненулевого статуса выхода. Для разных систем кодирования каждой строке кода присваивается статус выхода, который представляет собой число, указывающее, была ли она выполнена успешно или нет. Если компьютер успешно выполнил линию, он получает 0 в качестве статуса выхода. Если оно находится в диапазоне от 1 до 255, значит, это сбой. Хороший пример: если вы запустите строку, которая пытается получить доступ к файлу, которого нет на компьютере, она, скорее всего, получит код выхода 1.
Связанный: Способы проверить, существует ли файл с помощью Python
6. Ошибка переполнения
Когда дело доходит до кодирования, всегда есть ограничения. Например, когда вы пытаетесь поместить число в переменную (также известную как свойство), существует ограничение на то, насколько большим может быть это число. Если вы попытаетесь назначить большее число, чем этот предел, вы получите ошибку переполнения во время выполнения, что может привести к тому, что программа перестанет отвечать.
Когда вы получаете ошибку переполнения, вы должны начать с проверки, является ли ваша версия программного обеспечения последней. Если вы используете последнюю версию, попробуйте переустановить программное обеспечение.
7. Ошибка ошибки сегментации
Ошибки ошибки сегментации являются наиболее распространенным типом ошибок времени выполнения. Существуют определенные правила, которым программа должна следовать при доступе к памяти и записи в нее. Когда некоторые из этих правил нарушаются, вы рискуете получить ошибку ошибки сегментации.
Ошибка сегментации может произойти несколькими способами. Вот некоторые общие причины:
-
когда программа пытается записать в постоянную память
-
когда программа пытается получить доступ к памяти, к которой ей не разрешен доступ
-
когда программа пытается разыменовать освобожденную память или указатели NULL
-
когда программа пытается получить доступ к большему количеству данных, чем разрешено
-
когда программа пытается записать место, которое ей не разрешено
Если вы столкнетесь с одной из этих проблем, Переполнение стека есть отличный список решений, которые вы можете попробовать, поэтому обязательно ознакомьтесь с ним.
Множество ошибок во время выполнения в дикой природе
Когда дело доходит до ошибок времени выполнения, это только верхушка айсберга. Этот список можно продолжить, так как существует множество ошибок и еще больше способов их вызвать. Лучшее, что можно сделать, — это изучить больше ошибок времени выполнения, как их идентифицировать и как их решать; это может помочь предотвратить множество неприятностей.
При решении тренировочного задания столкнулся с ошибкой Presentation error.
Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи
Хотя, на локальной машине никаких проблем с выводом не возникает.
Само задание:
Даны два числа A и B. Вам нужно вычислить их сумму A+B. В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение.
Ввод: стандартный ввод или input.txt
Вывод: стандартный вывод или output.txt
package main
import (
"fmt"
"io"
"os"
"strconv"
"strings"
)
func main() {
input, err := os.Open("input.txt")
if err != nil {
fmt.Println(err)
return
}
defer input.Close()
file, err := os.Create("output.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
output, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY, 0777)
if err != nil {
fmt.Println(err)
return
}
defer output.Close()
data := make([]byte, 64)
for {
n, err := input.Read(data)
if err == io.EOF {
break
}
arr := strings.Split(string(data[:n]), " ")
a, err := strconv.Atoi(arr[0])
if err != nil {
fmt.Println(err)
return
}
b, err := strconv.Atoi(arr[1])
if err != nil {
fmt.Println(err)
return
}
if _, err = output.WriteString(strconv.Itoa(a + b)); err != nil {
fmt.Println(err)
return
}
_, err = os.Open("output.txt")
if err != nil {
fmt.Println(err)
return
}
}
}
Содержание
- 1 Общий принцип
- 2 Ввод и вывод данных
- 3 Тестирование решений
- 3.1 CE — Ошибка компиляции (Compilation Error)
- 3.2 TLE — Нарушен предел времени (Time Limit Exceeded)
- 3.3 ILE — Нарушен предел ожидания (Idleness Limit Exceeded)
- 3.4 MLE — Нарушен предел памяти (Memory Limit Exceeded)
- 3.5 RTE — Ошибка во время выполнения (Run-time Error)
- 3.6 PE — Ошибка представления (Presentation Error)
- 3.7 WA — Неправильный ответ (Wrong Answer)
- 3.8 OK — Принято (Accepted)
- 3.9 CF — Ошибка тестирования (Check Failed)
- 3.10 SV — Нарушение безопасности (Security Violation)
- 4 Особенности языков программирования
- 4.1 Выбор языка программирования
- 5 Конфигурация тестирующего сервера
- 6 Языки программирования
Общий принцип
В систему посылаются только файлы с исходным кодом, а сама посылаемая программа должна состоять только из одного файла: *.dpr
, *.cpp
, *.java
, *.pas
и т. д. Нельзя отправить в систему скомпилированный exe-файл, файл проекта Visual Studio и т. п.
В решениях запрещается:
- осуществлять доступ к сети;
- выполнять любые операции ввода/вывода, кроме открывания, закрывания, чтения и записи стандартных потоков stdin, stdout, stderr и файлов с именами, явно прописанными в условии задачи;
- сознательно «ломать» тестирующую систему;
- выполнять другие программы и порождать новые процессы;
- изменять права доступа к файловой системе;
- работать с поддиректориями;
- создавать и манипулировать ресурсами GUI (окна, диалоговые сообщения и т. д.);
- работать со внешними устройствами (звук, принтер и т. д.);
- выполнять прочие действия, призванные нарушить ход учебного процесса.
Решения выполняются в специальном окружении, обеспечивающем безопасный запуск, и попытка выполнить какие-либо из указанных действий закончится, скорее всего, получением вердикта «Ошибка во время выполнения».
Ввод и вывод данных
Во всех задачах необходимо считывать входные данные из текстового файла и выводить результат в текстовый файл. Имена файлов указаны в условии задачи. Предполагается, что файлы располагаются в текущем каталоге программы, поэтому в решениях можно и нужно использовать только их имена без абсолютных путей в файловой системе тестирующего сервера.
Можно считать, что изначально при запуске решения выходной файл будет отсутствовать, и решение должно его создать и записать туда ответ.
Внимательно проверяйте имена файлов в решениях на соответствие условию задачи.
Если в коде решения имена файлов указаны неверно, это может приводить к непредсказуемым последствиям. Так, если имя выходного файла указано неверно и требуемый по условию файл не создаётся, система, скорее всего, выдаст вердикт «Ошибка представления».
В случае, когда в решении на Java перепутано имя входного файла и делается попытка открыть несуществующий файл, выбрасывается исключение. Если автор решения не перехватывает его, программа завершается с вердиктом «Ошибка во время выполнения». Если же исключение обрабатывается, то вполне возможны и другие вердикты в зависимости от того, отработает ли программа и что окажется в выходном файле. Если в решении на C++ неправильно указан входной файл и ошибки специально не обрабатываются, чтение из файла может приводить к чтению произвольных данных («мусора»). Если в программе вместо чтения из файла делается попытка считать данные со стандартного ввода (stdin, который обычно связан с клавиатурой консоли), программа заблокируется («повиснет») в ожидании ввода и будет завершена с вердиктом «Превышен предел времени».
Решение может выводить произвольные данные «в консоль», то есть в стандартные потоки stdout, stderr, которые обычно связаны с консольным окном (например для отладки). Это не запрещается и не влияет на результат. Проверяется только содержимое выходного файла. Следует помнить, что на вывод тратится дополнительное время, поэтому большой объём отладочной информации может критически замедлить вашу программу. Вывод в stderr медленнее, чем в stdout, поскольку не буферизируется.
Тестирование решений
Каждое отправленное решение проходит на сервере проверку на нескольких тестах. Задача считается решённой только в случае прохождения всех тестов. Решение запускается на всех тестах, которые есть по задаче, и процесс тестирования не прерывается на первом непройденном тесте, как это делается в соревнованиях типа ACM.
Тестирование осуществляется автоматически, поэтому решения должны строго следовать формату входных и выходных данных, который описан в условии. В случае неясности можно задавать вопросы преподавателям. Если не сказано явно, все входные данные можно считать корректными и удовлетворяющими ограничениям из условия. Например, если сказано, что на входе целое число от 1 до 100 включительно, то можно считать, что это так и есть, и проверять неравенства и выводить ошибку в случае, если это не так, в коде решения нет необходимости.
Тесты по каждой задаче не упорядочены по сложности, по размеру входных данных, по какому-то иному критерию, а следуют в исторически сложившемся порядке их добавления в систему.
Не гарантируется, что первый тест в системе будет совпадать с тестом из условия (зачастую это не так).
Результатом проверки является итоговое сообщение системы и, возможно, в скобках номер первого теста, вызвавшего ошибку (если таковая имела место). Например, вердикт «Неправильный ответ (43)» означает, что решение успешно скомпилировалось и прошло без ошибок первые 42 теста по задаче, но на тесте под номером 43 выдало неверный ответ.
Далее опишем все допустимые сообщения тестирующей системы и укажем возможные причины их появления.
CE — Ошибка компиляции (Compilation Error)
Не удалось скомпилировать решение и получить исполняемый файл для запуска. Решение в таком случае, очевидно, не может быть проверено ни на одном тесте.
Посмотреть вывод компилятора и понять, почему код не удаётся скомпилировать, можно путём нажатия на иконку в таблице с вашими решениями. Наиболее частые причины ошибки компиляции: выбран неверный компилятор (для другого языка программирования или же несовместимая версия, например Java v7 вместо Java v8), отправляется не тот файл (файл проекта IDE вместо файла с исходным кодом).
Время работы компилятора ограничено 30 секундами. Если он не успел отработать по каким-либо причинам, также будет выставлен вердикт «Ошибка компиляции».
TLE — Нарушен предел времени (Time Limit Exceeded)
Для каждого теста установлено своё ограничение по времени (Time Limit) в секундах. Для разных тестов по одной задаче ограничение по времени может быть разным.
Тестирующая система учитывает так называемое процессорное время (CPU Time) выполнения процесса в операционной системе. Нет смысла делать решение задачи многопоточным, потому что распараллеливание хоть и позволяет сократить реальное время работы (Wall Time), но не уменьшает процессорное время.
Процесс-решение запускается на тесте, и если процесс не успевает завершиться в течение отведённого времени, он принудительно завершается и выставляется вердикт «Нарушен предел времени». В качестве времени работы решения на тесте указывается то время, которое процесс фактически проработал до того, как был приостановлен. Нет возможности узнать, сколько бы программа проработала, если бы не была снята по времени. Если при ограничении по времени на тест в 1 секунду вы видите, что решение получает вердикт «Нарушен предел времени» и работает 1015 мс, то нельзя это понимать как «решение чуть-чуть не успевает, надо ускорить его на 15 мс». Если решение останавливается по времени, то вывод программы никак не проверяется на предмет его правильности.
Возможные причины появления ошибки «Нарушен предел времени»:
- неэффективный алгоритм (например, в решении реализован алгоритм с временной сложностью Ω(n2), хотя задача предполагает решение за O(n log n));
- недостаточно эффективная программная реализация (идея и алгоритм правильные, но код написан не очень хорошо: например, ввод данных из файла осуществляется медленно, чрезмерно часто выделяется и освобождается память);
- попытка чтения данных с консоли (
std::cin
,scanf()
,getchar()
в C++,System.in
в Java), тогда как нужно читать входные данные из файла (в этом случае программа блокируется в ожидании ввода и зависает, не расходуя при этом CPU Time, поэтому такой случай тестирующая система обрабатывает отдельно); - ошибка в программе (например, программа входит в бесконечный цикл).
Не рекомендуется «пропихивать» медленное решение, отправляя его многократно, пока система не «согласится» его принять. Решение в любой момент может быть перетестировано и, соответственно, может перестать быть принятым из-за нарушения предела времени.
ILE — Нарушен предел ожидания (Idleness Limit Exceeded)
Программа зависла в ожидании, не потребляя при этом ресурсы процессора.
Такое может быть, например, если согласно условию чтение входных данных осуществляется из файла, а решение выполняет ввод с консоли. В этом случае процесс решения заблокируется в ожидании нажатия клавиш на клавиатуре. Через некоторое время система тестирования принудительно завершит этот процесс и выставит вердикт ILE.
MLE — Нарушен предел памяти (Memory Limit Exceeded)
Программа использует слишком много оперативной памяти, стоит проанализировать использование памяти и оптимизировать его.
Также причиной чрезмерного использования памяти может быть ошибка в программе, например, вечный цикл в теле которого на каждой или некоторых итерациях выделяется дополнительная память. К используемой памяти относится не только память с данными, но также память с кодом и программным стеком.
Ограничение по памяти есть не для всех задач. Гарантируется, что для всех тестов в рамках одной задачи ограничение по памяти одинаково.
Как и в случае нарушения ограничения по времени, программа при нарушении ограничения по памяти аварийно завершается тестирующей системой, её вывод не проверяется на правильность. Точно так же не следует воспринимать размер памяти, использованной до момента аварийного завершения, как объём, которого решению хватило бы для успешной работы. Более точно, вердикт MLE, полученный с использованием 257 МБ памяти, говорит о том, что приложение успело использовать 257 МБ памяти и было принудительно остановлено, но ничего не говорит о том, сколько памяти использовало бы приложение, не будучи принудительно остановленным.
В некоторых случаях при разовом выделении чрезмерно большого блока в памяти, этот запрос может быть не выполнен операционной системой, что в результате может привести к ошибке во время выполнения или (значительно реже) другому результату неопределённого поведения в случае с языком C++.
RTE — Ошибка во время выполнения (Run-time Error)
В операционной системе есть такое понятие, как код завершения процесса (Exit Code). Этот подход используется как в Windows, так и в ОС семейства UNIX. Это целое число, которое остаётся после прекращения выполнения программы. Общепринятое соглашение гласит, что нулевой код завершения свидетельствует о нормальном завершении процесса без ошибок, любой другой — об ошибке. Тестирующая система проверяет код завершения вашего решения, и если он не равен нулю, выставляет вердикт «Ошибка во время выполнения». При этом никак не проверяется то, что решение успело вывести в выходной файл.
Укажем типичные причины ошибок во время выполнения.
- Использована директива
package
в коде программы на Java.- В результате программа на Java находится не в пакете по умолчанию. Компилятор Java сгенерировал класс в некотором пакете (ошибки компиляции нет), а при запуске виртуальная машина Java не смогла найти этот класс, потому что искала в пакете по умолчанию (возникло исключение
ClassNotFoundException
с сообщением Could not find or load main class).
- В результате программа на Java находится не в пакете по умолчанию. Компилятор Java сгенерировал класс в некотором пакете (ошибки компиляции нет), а при запуске виртуальная машина Java не смогла найти этот класс, потому что искала в пакете по умолчанию (возникло исключение
- Выход за границы допустимой области памяти в программе на C++.
- Выход за границы массива, разыменование неправильного указателя, обращение к нулевому указателю.
- Переполнение системного стека.
- Эта причина является частой в случае рекурсии. Вообще, системный стек используется для размещения параметров функций, локальных переменных. Его размер, как правило, невелик и по умолчанию равен 1 МБ. При вызове функции стековая структура позволяет естественным образом сохранить текущие состояния всех локальных переменных и вернуться к ним, когда вызов завершится и управление вернётся в исходную точку. Если в алгоритме используется глубокая рекурсия, то размера стека может не хватить для хранения контекстов всех вызовов. Решений этой проблемы два:
- переписать алгоритм нерекурсивно (например с использованием своего стека, а не системного);
- увеличить размер системного стека, что делается по-разному для разных языков программирования (см. примеры для C++ (Visual Studio) и Java).
- Эта причина является частой в случае рекурсии. Вообще, системный стек используется для размещения параметров функций, локальных переменных. Его размер, как правило, невелик и по умолчанию равен 1 МБ. При вызове функции стековая структура позволяет естественным образом сохранить текущие состояния всех локальных переменных и вернуться к ним, когда вызов завершится и управление вернётся в исходную точку. Если в алгоритме используется глубокая рекурсия, то размера стека может не хватить для хранения контекстов всех вызовов. Решений этой проблемы два:
- Ошибка ввода-вывода (попытка открыть несуществующий входной файл).
- Нужно проверить правильность имени входного файла.
- Программа целенаправленно была завершена с ненулевым кодом выхода.
- В программе на C++ это может быть, если функция
main()
в C++ вернула ненулевой код (return (non-zero)
в функцииmain()
). Рекомендуется завершать функциюmain()
операторомreturn 0
(в старых компиляторах C++ это обязательно, современные компиляторы же подразумевают возврат нулевого кода автоматически). Также программу на C++ с произвольным кодом завершает вызовexit()
. - В программе на Java можно завершить процесс с произвольным кодом с помощью
System.exit()
.
- В программе на C++ это может быть, если функция
- Необработанное исключение.
- Причин возникновения исключений может быть масса. Например, если в Java функции
Integer.parseInt()
/Double.parseDouble()
была передана строка, содержащая пробельные символы (ASCII-коды 9, 10, 13, 32), выбрасывается исключениеNumberFormatException
.
- Причин возникновения исключений может быть масса. Например, если в Java функции
- Целочисленное деление на ноль.
- При выполнении деления нужно всегда думать, а не может ли делитель оказаться равным нулю. В то же время стоит отметить, что вещественное деление на ноль (в типах с плавающей точкой
double
,float
) по умолчанию не приводит к завершению программы, а даёт специальные значения+Inf
,-Inf
илиNaN
.
- При выполнении деления нужно всегда думать, а не может ли делитель оказаться равным нулю. В то же время стоит отметить, что вещественное деление на ноль (в типах с плавающей точкой
PE — Ошибка представления (Presentation Error)
Наиболее частая причина возникновения этой ошибки — не найден выходной файл. Возможно, вы забыли создать выходной файл и выводите ответ в консоль (он в таком случае игнорируется). Проверьте имена входного и выходного файла в вашей программе на соответствие условию задачи. Исторически сложилось, что в разных задачах входной и выходной файл именуются по разным правилам: input.txt и output.txt, in.txt и out.txt, input.in и output.out (обратите внимание, что нет расширения txt), [задача].in и [задача].out…
Для некоторых задач программа проверки (checker) дополнительно удостоверяется, что ваш вывод соответствует определённому формату, и выдаёт ошибку представления в случае, если это не так. Например, если в задаче нужно вывести число, а вы выводите строку. Или если в задаче нужно вывести сначала число k, затем k чисел, а ваше решение выводит число k и далее (k + 1) чисел (то есть решение выводит в файл лишние данные).
Также имейте в виду, что отлавливание исключений и других ошибок не должно быть самоцелью. Если исключение не обрабатывается каким-либо образом, обычно нет смысла его ловить по следующей причине. Аварийное завершение работы программы в результате ошибки во время выполнения приводит к вердикту «Ошибка во время выполнения», только если соответствующее исключение было «проброшено» наружу, а не «заглушено» на каком-то этапе. Если исключение отлавливается, но никак не обрабатывается, то в результате возникновения соответствующей ошибки следует ожидать вердикт «Ошибка представления» или же «Неправильный ответ» (реже).
WA — Неправильный ответ (Wrong Answer)
Для многих задач ответ однозначен, и проверяется просто побайтовое совпадение вашего выходного файла и сохранённого правильного ответа. Такая проверка требует строгого соблюдения формата файла, не допускает незначащих пробелов и пустых строк. Например, если правильный ответ имеет вид (пробелы обозначены символом ␣)
5 1␣2␣3␣4␣5
и решение вывело
5 1␣2␣3␣4␣5␣
(лишний пробел в конце второй строки), то будет получен вердикт «Неправильный ответ». Для некоторых задач написаны проверяющие программы (checker), которые к таким различиям лояльны и засчитывают ответы с лишними пробелами как правильные. Всегда точно следуйте формату файла и не выводите лишних пробелов, и проблем не будет.
После последней строки файла можно выводить или не выводить перевод строки — не важно. Есть две точки зрения в зависимости от того, с какой стороны смотреть на символ перевода строки:
- каждая строка завершается переводом строки, поэтому
n
в конце файла нужен; - перевод строки является разделителем между соседними строками, поэтому
n
в конце файла не нужен.
Первая точка зрения является общепринятой. Так, компилятор gcc, система контроля версий git и многие другие программы выдают предупреждение no newline at the end of file, если в самом конце файла нет символов новой строки. Обсуждение вопроса можно почитать на stackoverflow.
Поэтому рекомендуется придерживаться первого подхода и завершать все строки переводами строк.
Другие очевидные причины получения неправильного ответа:
- неверный алгоритм;
- ошибка в программе.
Бывает такое, что решение от запуска к запуску даёт разные ответы, или же правильно работает на одном компьютере и неправильно на другом. Такие случаи, как правило, связаны с ошибками в решениях.
OK — Принято (Accepted)
Программа работает правильно и прошла все тесты с соблюдением всех ограничений.
Если решение принято системой, это ещё не означает, что в его основе лежит правильный алгоритм. В любой момент могут появиться новые наборы входных данных, на которых будут заново протестированы все решения по задаче. Если ваше решение на самом деле не полностью верно и прошло только из-за недостаточно сильного набора тестов, оно может в будущем потерять статус «Принято».
CF — Ошибка тестирования (Check Failed)
Если указан номер теста, то программа успешно завершается на предложенном тесте (укладывается в отведённые время и память и не совершает ошибок во время выполнения), но результат не удаётся проверить из-за ошибок в программе проверки. Вашей ошибки в этом случае, возможно, никакой нет и после исправления программы проверки будет получен вердикт OK. Не исключены ещё два варианта: WA, PE.
Имейте в виду, что если ошибка тестирования возникает на первом же тесте, то на остальных Ваше решение не запускается вовсе. Соответственно, в этом случае после устранения ошибок программы проверки вердикты TLE, MLE, RTE также могут возникнуть в любом тесте, кроме первого.
Если же номер теста, на котором возникает ошибка тестирования, не указан, значит, программа проверки не была скомпилирована, а Ваше решение не запускалось вовсе. В этом случае правильным может быть любой вердикт, отличный от CF.
Если у Вас возникла ошибка тестирования, мы, скорее всего, это заметим достаточно быстро. Тем не менее, имеет смысл задать вопрос через пункт «Сообщения» в меню курса. Не забывайте выбрать задачу, которой касается этот вопрос.
SV — Нарушение безопасности (Security Violation)
Ошибка означает, что программа попыталась выполнить запрещённые действия.
К их числу относится попытка создания новых процессов. Вашим решениям запрещено запускать на выполнение другие программы. Например, в коде
порождается новый процесс командной оболочки cmd.exe и в нём выполняется команда pause. Пожалуйста, не пишите так, для достижения аналогичного эффекта можно использовать другие приёмы.
Особенности языков программирования
У каждого конкретного языка программирования есть свои особенности, о которых полезно знать. Далее рассмотрены отдельные особенности написания решений на разных языках программирования:
- C++;
- Java;
- C#;
- Python.
Выбор языка программирования
Разные задачи можно решать на разных языках. Часто для конкретной задачи тот или иной язык оказывается предпочтительным. Например, если в задаче требуются тяжёлые вычисления, то её может быть проще сдать на C++, чем на Java, за счёт более быстрой работы программы на C++ (для кода на Java могут потребоваться более изощрённые оптимизации, чтобы он прошёл по времени). С другой стороны, если задача требует проведения вычислений с большими целыми числами, выходящими за пределы диапазона 64-битных переменных, то есть «длинной арифметики», то решение существенно проще написать на Java, воспользовавшись готовым качественно написанным классом BigInteger
для операций с числами произвольной длины.
Конфигурация тестирующего сервера
Сервер, на котором осуществляется запуск решений, является виртуальной машиной, выполняющейся внутри Microsoft Hyper-V Server 2012 R2. Виртуальный компьютер работает под управлением Windows 7 Professional x64, оснащён процессором Intel® Core™ i3-4130 (Haswell, кэш 3 МБ, 3,40 ГГц, доступно только одно ядро) и 4 ГБ оперативной памяти. Для хранения входных и выходных файлов используется RAM-диск, чтобы обеспечить максимальную производительность ввода-вывода.
Языки программирования
На странице учебного курса в системе на вкладке «Компиляторы» можно ознакомиться с актуальным списком доступных языков программирования, версиями компиляторов и параметрами командной строки их вызова.
Размер системного стека явно не задаётся (используется размер по умолчанию). При компиляции кода на C++ включен режим оптимизации O2.
Содержание
- presentation error. Не могу найти причину ошибки в своём коде.
- Name already in use
- Data-Analysis-with-Python / Python / instructions / yandex_contest.md
- presentation error. Не могу найти причину ошибки в своём коде.
- Name already in use
- Data-Analysis-with-Python / Python / instructions / yandex_contest.md
presentation error. Не могу найти причину ошибки в своём коде.
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
1 13
5 3 1 3 5 2 5 3 1 3 5 2 56
#include
using namespace std;
int main() <
int n, x;
cin >> n;
int *p = new int[n + 1];
for (int i = 0; i > *(p + i); >
p[n] = ‘’;
for (int i = 1; i Лучший ответ
int main() <
int n, len;
cin >> n;
for (int i = 0; i > numbers[i]; >
Источник
Name already in use
Data-Analysis-with-Python / Python / instructions / yandex_contest.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
Copy raw contents
Copy raw contents
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
Также ошибка будет в таком фрагменте:
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода: print(‘str’ , print(‘123) и т.д.
- Проверьте наличие двоеточия после строчки с if, else, for, while ( if x>y: ).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print() , чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах input() или print() , т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок. Т.е. не нужно писать input(“Введите число: ”) или print(“Искомый результат: ”, res) (здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать просто input() или print(res) .
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки. При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек ( numpy , pandas , math , fractions , itertools и др.) не забывайте делать соответствующий import :
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е. Print() и print() – это разные функции). Например, 2^3 – неверная запись операции возведения в степень (нужно 2**3 ). Аналогично, Print(‘string’) – неверно, т.к. написано с большой буквы (верно print(‘string’) ).
- Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция write() принимает только одну строку в отличие от print() (который принимает сколько угодно параметров, а также именованные параметры вроде sep и end ). Также функция float() принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. запись float(«3,14») приведёт к ошибке (нужно float(«3.14») ).
- Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для lst=[1, 2, 3] обращение lst[500] вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаря d = <‘cat’: 3, ‘lion’: 2, ‘dog’: 7>вызовет ошибку обращение d[‘mouse’] (т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Источник
presentation error. Не могу найти причину ошибки в своём коде.
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
1 13
5 3 1 3 5 2 5 3 1 3 5 2 56
#include
using namespace std;
int main() <
int n, x;
cin >> n;
int *p = new int[n + 1];
for (int i = 0; i > *(p + i); >
p[n] = ‘’;
for (int i = 1; i Лучший ответ
int main() <
int n, len;
cin >> n;
for (int i = 0; i > numbers[i]; >
Источник
Name already in use
Data-Analysis-with-Python / Python / instructions / yandex_contest.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
Copy raw contents
Copy raw contents
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
Также ошибка будет в таком фрагменте:
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода: print(‘str’ , print(‘123) и т.д.
- Проверьте наличие двоеточия после строчки с if, else, for, while ( if x>y: ).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print() , чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах input() или print() , т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок. Т.е. не нужно писать input(“Введите число: ”) или print(“Искомый результат: ”, res) (здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать просто input() или print(res) .
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки. При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек ( numpy , pandas , math , fractions , itertools и др.) не забывайте делать соответствующий import :
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е. Print() и print() – это разные функции). Например, 2^3 – неверная запись операции возведения в степень (нужно 2**3 ). Аналогично, Print(‘string’) – неверно, т.к. написано с большой буквы (верно print(‘string’) ).
- Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция write() принимает только одну строку в отличие от print() (который принимает сколько угодно параметров, а также именованные параметры вроде sep и end ). Также функция float() принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. запись float(«3,14») приведёт к ошибке (нужно float(«3.14») ).
- Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для lst=[1, 2, 3] обращение lst[500] вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаря d = <‘cat’: 3, ‘lion’: 2, ‘dog’: 7>вызовет ошибку обращение d[‘mouse’] (т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Источник
Решаю вот эту задачу(пробный контест):
A. Быстрый старт
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
В этом году третий раз одна известная компания проводит соревнование по программированию искусственного интеллекта для игровых стратегий. В этот раз участникам предложили написать искусственный интеллект для управления командой хоккеистов. Вася решил побороться за главный приз. Прочитав раздел “Быстрый старт”, он приступил к делу. Не прошло и нескольких часов, как хоккеисты начали ездить за шайбой по площадке. Но Вася заметил, что не всегда у игрока получается взять шайбу. Перечитав внимательно документацию, он выяснил, что для расчета вероятности подобрать шайбу нужно подсчитать коэффициент, равный максимальному значению из двух характеристик хоккеиста — ловкости D и подвижности A. Помогите Васе по известным значениям ловкости и подвижности определить этот коэффициент.
Формат ввода
Во входном файле заданы два целых числа D и A (0 ≤ D, A ≤ 109) — ловкость и подвижность хоккеиста соответственно.
Формат вывода
В выходной файл выведите коэффициент
Пример 1
Ввод Вывод
100 64 100
Пример 2
Ввод Вывод
31 14 31
Код:
Python | ||
|
выводит ошибку Run-time error
хотя при проверке вроде все работало
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Тренируюсь решать задачи Яндекса.
Вот условие:
Дан упорядоченный по неубыванию массив целых 32-разрядных чисел. Требуется удалить из него все повторения.
Желательно получить решение, которое не считывает входной файл целиком в память, т.е., использует лишь константный объем памяти в процессе работы.
Первая строка входного файла содержит единственное число n, n ≤ 1000000.
На следующих n строк расположены числа — элементы массива, по одному на строку. Числа отсортированы по неубыванию.
У меня возникает Runtime error, а из-за чего — не могу понять. Не сказано же какая. В чём может быть проблема?
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class WooHoo {
public static void main(String[] args) throws Exception {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(r.readLine());
int prev = Integer.parseInt(r.readLine());
System.out.println(prev);
for (int i = 1; i < n; i++) {
int cur = Integer.parseInt(r.readLine());
if (prev == cur) {
continue;
} else {
prev = cur;
System.out.println(cur);
}
}
}
}
При решении тренировочного задания столкнулся с ошибкой Presentation error.
Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи
Хотя, на локальной машине никаких проблем с выводом не возникает.
Само задание:
Даны два числа A и B. Вам нужно вычислить их сумму A+B. В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение.
Ввод: стандартный ввод или input.txt
Вывод: стандартный вывод или output.txt
package main
import (
"fmt"
"io"
"os"
"strconv"
"strings"
)
func main() {
input, err := os.Open("input.txt")
if err != nil {
fmt.Println(err)
return
}
defer input.Close()
file, err := os.Create("output.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
output, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY, 0777)
if err != nil {
fmt.Println(err)
return
}
defer output.Close()
data := make([]byte, 64)
for {
n, err := input.Read(data)
if err == io.EOF {
break
}
arr := strings.Split(string(data[:n]), " ")
a, err := strconv.Atoi(arr[0])
if err != nil {
fmt.Println(err)
return
}
b, err := strconv.Atoi(arr[1])
if err != nil {
fmt.Println(err)
return
}
if _, err = output.WriteString(strconv.Itoa(a + b)); err != nil {
fmt.Println(err)
return
}
_, err = os.Open("output.txt")
if err != nil {
fmt.Println(err)
return
}
}
}
Сообщение | Кратко | Сообщается ли номер теста? | Значение вердикта | Возможная причина |
---|---|---|---|---|
OK | OK | Нет | Решение зачтено | Программа верно работает на соответствующем наборе тестов |
Compilation error | CE | Нет | Компиляция программы завершилась с ошибкой | 1. в программе допущена синтаксическая или семантическая ошибка 2. неправильно указан язык |
Wrong answer | WA | Да | Ответ неверен | 1. ошибка в программе 2. неверный алгоритм |
Presentation error | PE | Да | Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи | 1. неверный формат вывода 2. программа не печатает результат 3. лишний вывод |
Time-limit exceeded | TL | Да | Программа превысила установленный лимит времени | 1. ошибка в программе 2. неэффективное решение |
Memory limit exceeded | ML | Да | Программа превысила установленный в условиях лимит памяти | 1. ошибка в программе (например, бесконечная рекурсия) 2. неэффективное решение |
Output limit exceeded | OL | Да | Программа превысила установленный в условиях лимит вывода | 1. программа выводит больше информации, чем установлено в ограничениях |
Run-time error | RE | Да | Программа завершила работу с ненулевым кодом возврата | 1. ошибка выполнения 2. программа на C или C++ не завершается оператором return 0 3. ненулевой код возврата указан явно 4. Программа на Java описана в пакете |
Precompile check failed | PCF | Нет | Программа не прошла проверку на качество кода перед компиляцией | 1. плохое качество кода 2. неправильно отформатированный код |
Idleness limit exceeded | IL | Да | Программа слишком долго не отвечала на запросы системы и не выполняла действий | 1. программа ожидает ввода с консоли, которого не должно быть 2. не использован flush() |
Yandex Contest
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
Инструкция
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
x = 123 print(x) # Ошибка будет здесь, т.к. перед print стоят лишние отступы
Также ошибка будет в таком фрагменте:
x = 1 if x==1: print("One") else: print("Else") # Ошибка будет здесь, т.к. во всех блоках программы должно быть одинаковое # количество отступов, здесь внутри else перед print используется 1 отступ, хотя # ранее после if перед print использовалось 4 отступа
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода:
print('str'
,print('123)
и т.д. - Проверьте наличие двоеточия после строчки с
if, else, for, while
(if x>y:
).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print()
, чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах
input()
илиprint()
, т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок.
Т.е. не нужно писатьinput(“Введите число: ”)
илиprint(“Искомый результат: ”, res)
(здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать простоinput()
илиprint(res)
.
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки.
При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек (
numpy
,pandas
,math
,fractions
,itertools
и др.) не забывайте делать соответствующийimport
:
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е.
Print()
иprint()
– это разные функции). Например,2^3
– неверная запись операции возведения в степень (нужно2**3
). Аналогично,Print('string')
– неверно, т.к. написано с большой буквы (верноprint('string')
). - Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция
write()
принимает только одну строку в отличие отprint()
(который принимает сколько угодно параметров, а также именованные параметры вродеsep
иend
). Также функцияfloat()
принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. записьfloat("3,14")
приведёт к ошибке (нужноfloat("3.14")
). - Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для
lst=[1, 2, 3]
обращениеlst[500]
вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаряd = {‘cat’: 3, ‘lion’: 2, ‘dog’: 7}
вызовет ошибку обращениеd[‘mouse’]
(т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Решаю вот эту задачу(пробный контест):
A. Быстрый старт
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
В этом году третий раз одна известная компания проводит соревнование по программированию искусственного интеллекта для игровых стратегий. В этот раз участникам предложили написать искусственный интеллект для управления командой хоккеистов. Вася решил побороться за главный приз. Прочитав раздел “Быстрый старт”, он приступил к делу. Не прошло и нескольких часов, как хоккеисты начали ездить за шайбой по площадке. Но Вася заметил, что не всегда у игрока получается взять шайбу. Перечитав внимательно документацию, он выяснил, что для расчета вероятности подобрать шайбу нужно подсчитать коэффициент, равный максимальному значению из двух характеристик хоккеиста — ловкости D и подвижности A. Помогите Васе по известным значениям ловкости и подвижности определить этот коэффициент.
Формат ввода
Во входном файле заданы два целых числа D и A (0 ≤ D, A ≤ 109) — ловкость и подвижность хоккеиста соответственно.
Формат вывода
В выходной файл выведите коэффициент
Пример 1
Ввод Вывод
100 64 100
Пример 2
Ввод Вывод
31 14 31
Код:
Python | ||
|
выводит ошибку Run-time error
хотя при проверке вроде все работало
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Yandex Contest
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
Инструкция
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
x = 123 print(x) # Ошибка будет здесь, т.к. перед print стоят лишние отступы
Также ошибка будет в таком фрагменте:
x = 1 if x==1: print("One") else: print("Else") # Ошибка будет здесь, т.к. во всех блоках программы должно быть одинаковое # количество отступов, здесь внутри else перед print используется 1 отступ, хотя # ранее после if перед print использовалось 4 отступа
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода:
print('str'
,print('123)
и т.д. - Проверьте наличие двоеточия после строчки с
if, else, for, while
(if x>y:
).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print()
, чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах
input()
илиprint()
, т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок.
Т.е. не нужно писатьinput(“Введите число: ”)
илиprint(“Искомый результат: ”, res)
(здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать простоinput()
илиprint(res)
.
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки.
При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек (
numpy
,pandas
,math
,fractions
,itertools
и др.) не забывайте делать соответствующийimport
:
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е.
Print()
иprint()
– это разные функции). Например,2^3
– неверная запись операции возведения в степень (нужно2**3
). Аналогично,Print('string')
– неверно, т.к. написано с большой буквы (верноprint('string')
). - Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция
write()
принимает только одну строку в отличие отprint()
(который принимает сколько угодно параметров, а также именованные параметры вродеsep
иend
). Также функцияfloat()
принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. записьfloat("3,14")
приведёт к ошибке (нужноfloat("3.14")
). - Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для
lst=[1, 2, 3]
обращениеlst[500]
вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаряd = {‘cat’: 3, ‘lion’: 2, ‘dog’: 7}
вызовет ошибку обращениеd[‘mouse’]
(т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Тренируюсь решать задачи Яндекса.
Вот условие:
Дан упорядоченный по неубыванию массив целых 32-разрядных чисел. Требуется удалить из него все повторения.
Желательно получить решение, которое не считывает входной файл целиком в память, т.е., использует лишь константный объем памяти в процессе работы.
Первая строка входного файла содержит единственное число n, n ≤ 1000000.
На следующих n строк расположены числа — элементы массива, по одному на строку. Числа отсортированы по неубыванию.
У меня возникает Runtime error, а из-за чего — не могу понять. Не сказано же какая. В чём может быть проблема?
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class WooHoo {
public static void main(String[] args) throws Exception {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(r.readLine());
int prev = Integer.parseInt(r.readLine());
System.out.println(prev);
for (int i = 1; i < n; i++) {
int cur = Integer.parseInt(r.readLine());
if (prev == cur) {
continue;
} else {
prev = cur;
System.out.println(cur);
}
}
}
}
Содержание
- Работа с тестирующей системой, расшифровка сообщений. «Задача A+B» на разных языках
- Задача «A+B» на разных языках программирования
- Pascal
- Delphi
- Сообщения тестирующей системы
- Компиляторы
- Примеры ошибок в решениях:
- Presentation Error (PE)
- Wrong Answer (WA)
- Compile Error (CE)
- Runtime Error (RE)
- Time Limit (TL)
- Memory Limit (ML)
- presentation error. Не могу найти причину ошибки в своём коде.
- Проверка решения
- Задачи с автоматической проверкой
- Задачи с ручной проверкой
- Все решения
- Фильтрация
- Статусы задач
- Проверка на плагиат
- Проверка решения
- Задачи с автоматической проверкой
- Задачи с ручной проверкой
- Все решения
- Фильтрация
- Статусы задач
- Проверка на плагиат
Работа с тестирующей системой, расшифровка сообщений. «Задача A+B» на разных языках
Тестирующая система TestSys расположена по адресу: ts.lokos.net.
Для входа в систему следует использовать логин (обычно — 2 цифры) и пароль выданные преподавателем.
Задача «A+B» на разных языках программирования
Нужно ввести из входного файла два целых числа и вывести их сумму в выходной файл.
Pascal
Delphi
Сообщения тестирующей системы
- Accepted— Все в порядке! Ваша программа принята! Она откомпилировалась без ошибок и прошла все тесты.
- Presentation Error (PE) — неправильный формат вывода, проверяющая программа не смогла прочитать ваш выходной файл или ваша программа вообще не создала выходной файл.
- Wrong Answer (WA)— неправильный ответ на тест.
- Compile Error (CE) — ошибки компиляции программы. Посмотрите что вы отправляете (нажмите view в отправках).
- Runtime Error (RT) — ошибка времени выполнения (выход за границы массива, переполнение переменной, деление на ноль, корень из отрицательного числа, ошибка в имени входного файла).
- Time Limit (TL) — ваша программа выполнялась на каком-то тесте больше времени по условию задачи.
- Memory Limit (ML) — ваша программа использовала больше памяти, чем разрешено по условию задачи.
Компиляторы
- Pascal: Borland Delphi 7.0, Free Pascal 2.6.0;
- C/C++: Visual C++ 2010 Express Edition, GNU C++ 4.6.1 (MinGW), Code::Blocks 10.05;
- C#: Visual C# 2010 Express Edition;
- Java: Sun JDK 7 update 9, Eclipse 4.2.
- Python: Python 3.3.0, Wing IDE 101 4.1.9.
Примеры ошибок в решениях:
Presentation Error (PE)
Неправильное имя выходного файла:
Программа выводит на экран вместо файла:
Wrong Answer (WA)
Точности/разрядности типов данных не хватает:
Compile Error (CE)
Комментарий тестирующей системы:
Runtime Error (RE)
Программа завершилась с ненулевым кодом возврата, либо создала исключительную ситуацию (exception) и не обработала ее.
Для поиска RE в программе на Delphi используйте директивы:
Time Limit (TL)
Программа не завершилась за отведенный период времени.
Возможные причины:
- Неэффективное решение;
- Ошибка в программе (например, зацикливание).
Memory Limit (ML)
Программа попыталась использовать больше памяти, чем разрешается.
Источник
presentation error. Не могу найти причину ошибки в своём коде.
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
1 13
5 3 1 3 5 2 5 3 1 3 5 2 56
#include
using namespace std;
int main() <
int n, x;
cin >> n;
int *p = new int[n + 1];
for (int i = 0; i > *(p + i); >
p[n] = ‘’;
for (int i = 1; i Лучший ответ
int main() <
int n, len;
cin >> n;
for (int i = 0; i > numbers[i]; >
Источник
Проверка решения
Задачи с автоматической проверкой
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
В правой части экрана появится окно с подробными результатами автоматической проверки.
Задачи с ручной проверкой
Для некоторых задач с ручной проверкой предусмотрен набор предварительных тестов. Вам останется проверить, например, использует ли ученик нужные конструкции или не списывают ли в группе.
Часть решений, например в творческих задачах, нужно полностью проверять вручную.
Ученику будет назначено максимальное количество баллов за задачу.
По умолчанию указано максимально возможное количество баллов.
Все решения
Вы можете посмотреть все решения, которые отправили ученики, на вкладке Решения . Последние попытки решений отображаются в начале списка.
Фильтрация
Статусы задач
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Проверка на плагиат
Каждая попытка решения задачи проходит проверку на плагиат. Проверка происходит автоматически, попытка ученика сравнивается с попытками решения той же задачи других учеников Лицея Академии Яндекса.
Если подозрение на плагиат есть, рядом с номером решения появляется значок .
Чтобы проверить попытку на плагиат:
Проверка решения
Задачи с автоматической проверкой
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
Вердикт | Расшифровка |
---|---|
OK | Решение зачтено, программа на всех тестах работает корректно. |
runtime-error | Ошибка при выполнении программы: программа завершила работу с ненулевым кодом возврата. |
time-limit-exceeded | Превышен лимит времени: решение неэффективное или в программе ошибка. |
wrong-answer | Неверный ответ: в программе ошибка или алгоритм неверный. |
presentation-error | Неверный формат вывода. |
compilation-error | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
memory-limit-exceeded | Превышен лимит памяти: решение неэффективное или в программе ошибка. |
crash | Ошибка проверки, обратитесь в поддержку. |
precompile-check-failed | Программа не прошла проверку на качество кода перед компиляцией. |
output-limit-exceeded | Программа превысила лимит вывода, установленный в условиях. |
ignored | Ошибка оформления кода: допущена синтаксическая или семантическая ошибка. |
idleness-limit-exceeded | Программа долго не отвечала на запросы и не выполняла действий. |
В правой части экрана появится окно с подробными результатами автоматической проверки.
Задачи с ручной проверкой
Для некоторых задач с ручной проверкой предусмотрен набор предварительных тестов. Вам останется проверить, например, использует ли ученик нужные конструкции или не списывают ли в группе.
Часть решений, например в творческих задачах, нужно полностью проверять вручную.
Ученику будет назначено максимальное количество баллов за задачу.
По умолчанию указано максимально возможное количество баллов.
Все решения
Вы можете посмотреть все решения, которые отправили ученики, на вкладке Решения . Последние попытки решений отображаются в начале списка.
Фильтрация
Статусы задач
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Статус | Расшифровка |
---|---|
Автопроверка | Решение отправлено на проверку в Яндекс Контест |
На ручной проверке | Решение ожидает ручной проверки |
Доработать | Решение не прошло проверку и вернулось к ученику на доработку |
Зачтено | Решение прошло проверку, ученик получил за него баллы, задача считается сданной |
Зачтено после дедлайна | Решение прошло проверку, но ученик не получит за него баллы, потому что решение отправлено после дедлайна |
Проверка на плагиат
Каждая попытка решения задачи проходит проверку на плагиат. Проверка происходит автоматически, попытка ученика сравнивается с попытками решения той же задачи других учеников Лицея Академии Яндекса.
Если подозрение на плагиат есть, рядом с номером решения появляется значок .
Источник
Разве вы не ненавидите, когда вы пытаетесь запустить программу и получаете сообщение об ошибке «Ошибка выполнения»? К сожалению, несмотря на то, что люди регулярно раздражают, ужасная ошибка времени выполнения не очень хорошо объясняет сама себя и то, что именно произошло.
Ошибки времени выполнения бывают разных форм и размеров, и они печально известны тем, что мешают вашему рабочему процессу. Таким образом, вот некоторые из наиболее распространенных ошибок времени выполнения, их причины и способы их устранения.
Что такое ошибки во время выполнения?
Ошибка выполнения возникает в программе, пока она выполняется. Ошибки времени выполнения определяются тем, как они возникают после компиляции программы, а не во время разработки программы. Ошибки времени выполнения разочаровывают тем, что они могут привести к неожиданному завершению работы программы, и иногда бывает трудно определить единственную причину.
Различные типы ошибок времени выполнения
Во время выполнения могут возникать несколько различных типов ошибок, поэтому рекомендуется узнать, что они из себя представляют и что их вызывает. Таким образом, вы будете точно знать, что делать, когда кто-то поднимает свою уродливую голову.
1. Ошибка деления на ноль
Ваш компьютер выполняет много математических операций при обработке данных, а это означает, что ошибки могут возникать даже при выполнении простых арифметических действий. Например, одна распространенная ошибка времени выполнения называется ошибкой «Делить на ноль». Этот симпатичный на носу; это происходит, когда ваш компьютер производит вычисления и пытается разделить число на 0.
Когда вы пытаетесь разделить число на 0, вы получите неопределенное число. Когда компьютер делает это, он не знает, что делать с неопределенным числом, и вызывает сбой программы.
К сожалению, это не та ошибка, которую вы можете решить на своей стороне. Если вы обнаружите ошибку деления на ноль, лучше всего обратиться к разработчику программного обеспечения.
2. Ошибки, вызванные неполной установкой
Иногда в процессе установки что-то идет не так. Существует множество причин, по которым программа не устанавливается должным образом, и когда это происходит, это может привести к проблемам.
Иногда некоторые файлы не устанавливаются или в установочном пакете есть ошибки. В любом случае, если программа не установлена должным образом, определенные файлы, которые ей необходимо запустить, могут не существовать, что приведет к ошибке выполнения. В этом случае лучше всего переустановить программу или попробовать найти другую версию установочного пакета.
3. Логические ошибки в программировании программного обеспечения.
Независимо от того, насколько хорош программист, всегда возникают случайные ошибки. Логическая ошибка — это тип ошибки времени выполнения, который может указывать на ошибку в кодировании.
По теме: Типы ошибок программирования и как их избежать
Горячий ответ: кодирование — это довольно сложно. Существуют тысячи и тысячи символов, которые необходимо правильно ввести для правильной работы программы. Если в коде есть опечатки, это может привести к неожиданным результатам. Из-за этого программа может глючить или даже вообще вылетать.
Лучше всего обратиться к разработчику программного обеспечения. Вы также должны проверить, используете ли вы самую последнюю версию программного обеспечения. В более поздней версии проблема может быть решена.
4. Ошибки, вызванные утечками памяти.
Еще одна довольно распространенная ошибка времени выполнения — ошибка утечки памяти. Когда программа запущена, она использует часть оперативной памяти. Затем, когда программа завершается, она сообщает системе, что она завершена, и освобождает эту оперативную память, чтобы другие программы могли ее использовать. Однако иногда программа этого не делает, и программы продолжают использовать новую оперативную память, пока она не закончится.
Связанный: Как устранить нехватку оперативной памяти или утечки памяти в Windows
Представьте себе жилой комплекс с 10 квартирами, восемь из которых заняты. Если трое жильцов уезжают, не сообщив об этом руководству квартиры, офис считает, что восемь квартир все еще заняты, когда заняты только пять. Затем, когда еще три человека хотят переехать, офис отказывает одному человеку, полагая, что для него нет места.
Утечка памяти может привести к проблемам с ОЗУ, снижению производительности и сбоям программы. В этом случае хорошим решением будет перезагрузка компьютера. Это полностью очистит всю оперативную память.
5. Ошибка ненулевого статуса выхода.
Программное обеспечение состоит из множества строк кода. Каждая линия должна функционировать должным образом, чтобы все работало бесперебойно. К сожалению, бывают случаи, когда линия работает не так, как должна, что приводит к ошибкам.
Одна такая ошибка называется ошибкой ненулевого статуса выхода. Для разных систем кодирования каждой строке кода присваивается статус выхода, который представляет собой число, указывающее, была ли она выполнена успешно или нет. Если компьютер успешно выполнил линию, он получает 0 в качестве статуса выхода. Если оно находится в диапазоне от 1 до 255, значит, это сбой. Хороший пример: если вы запустите строку, которая пытается получить доступ к файлу, которого нет на компьютере, она, скорее всего, получит код выхода 1.
Связанный: Способы проверить, существует ли файл с помощью Python
6. Ошибка переполнения
Когда дело доходит до кодирования, всегда есть ограничения. Например, когда вы пытаетесь поместить число в переменную (также известную как свойство), существует ограничение на то, насколько большим может быть это число. Если вы попытаетесь назначить большее число, чем этот предел, вы получите ошибку переполнения во время выполнения, что может привести к тому, что программа перестанет отвечать.
Когда вы получаете ошибку переполнения, вы должны начать с проверки, является ли ваша версия программного обеспечения последней. Если вы используете последнюю версию, попробуйте переустановить программное обеспечение.
7. Ошибка ошибки сегментации
Ошибки ошибки сегментации являются наиболее распространенным типом ошибок времени выполнения. Существуют определенные правила, которым программа должна следовать при доступе к памяти и записи в нее. Когда некоторые из этих правил нарушаются, вы рискуете получить ошибку ошибки сегментации.
Ошибка сегментации может произойти несколькими способами. Вот некоторые общие причины:
-
когда программа пытается записать в постоянную память
-
когда программа пытается получить доступ к памяти, к которой ей не разрешен доступ
-
когда программа пытается разыменовать освобожденную память или указатели NULL
-
когда программа пытается получить доступ к большему количеству данных, чем разрешено
-
когда программа пытается записать место, которое ей не разрешено
Если вы столкнетесь с одной из этих проблем, Переполнение стека есть отличный список решений, которые вы можете попробовать, поэтому обязательно ознакомьтесь с ним.
Множество ошибок во время выполнения в дикой природе
Когда дело доходит до ошибок времени выполнения, это только верхушка айсберга. Этот список можно продолжить, так как существует множество ошибок и еще больше способов их вызвать. Лучшее, что можно сделать, — это изучить больше ошибок времени выполнения, как их идентифицировать и как их решать; это может помочь предотвратить множество неприятностей.
При решении тренировочного задания столкнулся с ошибкой Presentation error.
Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи
Хотя, на локальной машине никаких проблем с выводом не возникает.
Само задание:
Даны два числа A и B. Вам нужно вычислить их сумму A+B. В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение.
Ввод: стандартный ввод или input.txt
Вывод: стандартный вывод или output.txt
package main
import (
"fmt"
"io"
"os"
"strconv"
"strings"
)
func main() {
input, err := os.Open("input.txt")
if err != nil {
fmt.Println(err)
return
}
defer input.Close()
file, err := os.Create("output.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
output, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY, 0777)
if err != nil {
fmt.Println(err)
return
}
defer output.Close()
data := make([]byte, 64)
for {
n, err := input.Read(data)
if err == io.EOF {
break
}
arr := strings.Split(string(data[:n]), " ")
a, err := strconv.Atoi(arr[0])
if err != nil {
fmt.Println(err)
return
}
b, err := strconv.Atoi(arr[1])
if err != nil {
fmt.Println(err)
return
}
if _, err = output.WriteString(strconv.Itoa(a + b)); err != nil {
fmt.Println(err)
return
}
_, err = os.Open("output.txt")
if err != nil {
fmt.Println(err)
return
}
}
}
Содержание
- 1 Общий принцип
- 2 Ввод и вывод данных
- 3 Тестирование решений
- 3.1 CE — Ошибка компиляции (Compilation Error)
- 3.2 TLE — Нарушен предел времени (Time Limit Exceeded)
- 3.3 ILE — Нарушен предел ожидания (Idleness Limit Exceeded)
- 3.4 MLE — Нарушен предел памяти (Memory Limit Exceeded)
- 3.5 RTE — Ошибка во время выполнения (Run-time Error)
- 3.6 PE — Ошибка представления (Presentation Error)
- 3.7 WA — Неправильный ответ (Wrong Answer)
- 3.8 OK — Принято (Accepted)
- 3.9 CF — Ошибка тестирования (Check Failed)
- 3.10 SV — Нарушение безопасности (Security Violation)
- 4 Особенности языков программирования
- 4.1 Выбор языка программирования
- 5 Конфигурация тестирующего сервера
- 6 Языки программирования
Общий принцип
В систему посылаются только файлы с исходным кодом, а сама посылаемая программа должна состоять только из одного файла: *.dpr
, *.cpp
, *.java
, *.pas
и т. д. Нельзя отправить в систему скомпилированный exe-файл, файл проекта Visual Studio и т. п.
В решениях запрещается:
- осуществлять доступ к сети;
- выполнять любые операции ввода/вывода, кроме открывания, закрывания, чтения и записи стандартных потоков stdin, stdout, stderr и файлов с именами, явно прописанными в условии задачи;
- сознательно «ломать» тестирующую систему;
- выполнять другие программы и порождать новые процессы;
- изменять права доступа к файловой системе;
- работать с поддиректориями;
- создавать и манипулировать ресурсами GUI (окна, диалоговые сообщения и т. д.);
- работать со внешними устройствами (звук, принтер и т. д.);
- выполнять прочие действия, призванные нарушить ход учебного процесса.
Решения выполняются в специальном окружении, обеспечивающем безопасный запуск, и попытка выполнить какие-либо из указанных действий закончится, скорее всего, получением вердикта «Ошибка во время выполнения».
Ввод и вывод данных
Во всех задачах необходимо считывать входные данные из текстового файла и выводить результат в текстовый файл. Имена файлов указаны в условии задачи. Предполагается, что файлы располагаются в текущем каталоге программы, поэтому в решениях можно и нужно использовать только их имена без абсолютных путей в файловой системе тестирующего сервера.
Можно считать, что изначально при запуске решения выходной файл будет отсутствовать, и решение должно его создать и записать туда ответ.
Внимательно проверяйте имена файлов в решениях на соответствие условию задачи.
Если в коде решения имена файлов указаны неверно, это может приводить к непредсказуемым последствиям. Так, если имя выходного файла указано неверно и требуемый по условию файл не создаётся, система, скорее всего, выдаст вердикт «Ошибка представления».
В случае, когда в решении на Java перепутано имя входного файла и делается попытка открыть несуществующий файл, выбрасывается исключение. Если автор решения не перехватывает его, программа завершается с вердиктом «Ошибка во время выполнения». Если же исключение обрабатывается, то вполне возможны и другие вердикты в зависимости от того, отработает ли программа и что окажется в выходном файле. Если в решении на C++ неправильно указан входной файл и ошибки специально не обрабатываются, чтение из файла может приводить к чтению произвольных данных («мусора»). Если в программе вместо чтения из файла делается попытка считать данные со стандартного ввода (stdin, который обычно связан с клавиатурой консоли), программа заблокируется («повиснет») в ожидании ввода и будет завершена с вердиктом «Превышен предел времени».
Решение может выводить произвольные данные «в консоль», то есть в стандартные потоки stdout, stderr, которые обычно связаны с консольным окном (например для отладки). Это не запрещается и не влияет на результат. Проверяется только содержимое выходного файла. Следует помнить, что на вывод тратится дополнительное время, поэтому большой объём отладочной информации может критически замедлить вашу программу. Вывод в stderr медленнее, чем в stdout, поскольку не буферизируется.
Тестирование решений
Каждое отправленное решение проходит на сервере проверку на нескольких тестах. Задача считается решённой только в случае прохождения всех тестов. Решение запускается на всех тестах, которые есть по задаче, и процесс тестирования не прерывается на первом непройденном тесте, как это делается в соревнованиях типа ACM.
Тестирование осуществляется автоматически, поэтому решения должны строго следовать формату входных и выходных данных, который описан в условии. В случае неясности можно задавать вопросы преподавателям. Если не сказано явно, все входные данные можно считать корректными и удовлетворяющими ограничениям из условия. Например, если сказано, что на входе целое число от 1 до 100 включительно, то можно считать, что это так и есть, и проверять неравенства и выводить ошибку в случае, если это не так, в коде решения нет необходимости.
Тесты по каждой задаче не упорядочены по сложности, по размеру входных данных, по какому-то иному критерию, а следуют в исторически сложившемся порядке их добавления в систему.
Не гарантируется, что первый тест в системе будет совпадать с тестом из условия (зачастую это не так).
Результатом проверки является итоговое сообщение системы и, возможно, в скобках номер первого теста, вызвавшего ошибку (если таковая имела место). Например, вердикт «Неправильный ответ (43)» означает, что решение успешно скомпилировалось и прошло без ошибок первые 42 теста по задаче, но на тесте под номером 43 выдало неверный ответ.
Далее опишем все допустимые сообщения тестирующей системы и укажем возможные причины их появления.
CE — Ошибка компиляции (Compilation Error)
Не удалось скомпилировать решение и получить исполняемый файл для запуска. Решение в таком случае, очевидно, не может быть проверено ни на одном тесте.
Посмотреть вывод компилятора и понять, почему код не удаётся скомпилировать, можно путём нажатия на иконку в таблице с вашими решениями. Наиболее частые причины ошибки компиляции: выбран неверный компилятор (для другого языка программирования или же несовместимая версия, например Java v7 вместо Java v8), отправляется не тот файл (файл проекта IDE вместо файла с исходным кодом).
Время работы компилятора ограничено 30 секундами. Если он не успел отработать по каким-либо причинам, также будет выставлен вердикт «Ошибка компиляции».
TLE — Нарушен предел времени (Time Limit Exceeded)
Для каждого теста установлено своё ограничение по времени (Time Limit) в секундах. Для разных тестов по одной задаче ограничение по времени может быть разным.
Тестирующая система учитывает так называемое процессорное время (CPU Time) выполнения процесса в операционной системе. Нет смысла делать решение задачи многопоточным, потому что распараллеливание хоть и позволяет сократить реальное время работы (Wall Time), но не уменьшает процессорное время.
Процесс-решение запускается на тесте, и если процесс не успевает завершиться в течение отведённого времени, он принудительно завершается и выставляется вердикт «Нарушен предел времени». В качестве времени работы решения на тесте указывается то время, которое процесс фактически проработал до того, как был приостановлен. Нет возможности узнать, сколько бы программа проработала, если бы не была снята по времени. Если при ограничении по времени на тест в 1 секунду вы видите, что решение получает вердикт «Нарушен предел времени» и работает 1015 мс, то нельзя это понимать как «решение чуть-чуть не успевает, надо ускорить его на 15 мс». Если решение останавливается по времени, то вывод программы никак не проверяется на предмет его правильности.
Возможные причины появления ошибки «Нарушен предел времени»:
- неэффективный алгоритм (например, в решении реализован алгоритм с временной сложностью Ω(n2), хотя задача предполагает решение за O(n log n));
- недостаточно эффективная программная реализация (идея и алгоритм правильные, но код написан не очень хорошо: например, ввод данных из файла осуществляется медленно, чрезмерно часто выделяется и освобождается память);
- попытка чтения данных с консоли (
std::cin
,scanf()
,getchar()
в C++,System.in
в Java), тогда как нужно читать входные данные из файла (в этом случае программа блокируется в ожидании ввода и зависает, не расходуя при этом CPU Time, поэтому такой случай тестирующая система обрабатывает отдельно); - ошибка в программе (например, программа входит в бесконечный цикл).
Не рекомендуется «пропихивать» медленное решение, отправляя его многократно, пока система не «согласится» его принять. Решение в любой момент может быть перетестировано и, соответственно, может перестать быть принятым из-за нарушения предела времени.
ILE — Нарушен предел ожидания (Idleness Limit Exceeded)
Программа зависла в ожидании, не потребляя при этом ресурсы процессора.
Такое может быть, например, если согласно условию чтение входных данных осуществляется из файла, а решение выполняет ввод с консоли. В этом случае процесс решения заблокируется в ожидании нажатия клавиш на клавиатуре. Через некоторое время система тестирования принудительно завершит этот процесс и выставит вердикт ILE.
MLE — Нарушен предел памяти (Memory Limit Exceeded)
Программа использует слишком много оперативной памяти, стоит проанализировать использование памяти и оптимизировать его.
Также причиной чрезмерного использования памяти может быть ошибка в программе, например, вечный цикл в теле которого на каждой или некоторых итерациях выделяется дополнительная память. К используемой памяти относится не только память с данными, но также память с кодом и программным стеком.
Ограничение по памяти есть не для всех задач. Гарантируется, что для всех тестов в рамках одной задачи ограничение по памяти одинаково.
Как и в случае нарушения ограничения по времени, программа при нарушении ограничения по памяти аварийно завершается тестирующей системой, её вывод не проверяется на правильность. Точно так же не следует воспринимать размер памяти, использованной до момента аварийного завершения, как объём, которого решению хватило бы для успешной работы. Более точно, вердикт MLE, полученный с использованием 257 МБ памяти, говорит о том, что приложение успело использовать 257 МБ памяти и было принудительно остановлено, но ничего не говорит о том, сколько памяти использовало бы приложение, не будучи принудительно остановленным.
В некоторых случаях при разовом выделении чрезмерно большого блока в памяти, этот запрос может быть не выполнен операционной системой, что в результате может привести к ошибке во время выполнения или (значительно реже) другому результату неопределённого поведения в случае с языком C++.
RTE — Ошибка во время выполнения (Run-time Error)
В операционной системе есть такое понятие, как код завершения процесса (Exit Code). Этот подход используется как в Windows, так и в ОС семейства UNIX. Это целое число, которое остаётся после прекращения выполнения программы. Общепринятое соглашение гласит, что нулевой код завершения свидетельствует о нормальном завершении процесса без ошибок, любой другой — об ошибке. Тестирующая система проверяет код завершения вашего решения, и если он не равен нулю, выставляет вердикт «Ошибка во время выполнения». При этом никак не проверяется то, что решение успело вывести в выходной файл.
Укажем типичные причины ошибок во время выполнения.
- Использована директива
package
в коде программы на Java.- В результате программа на Java находится не в пакете по умолчанию. Компилятор Java сгенерировал класс в некотором пакете (ошибки компиляции нет), а при запуске виртуальная машина Java не смогла найти этот класс, потому что искала в пакете по умолчанию (возникло исключение
ClassNotFoundException
с сообщением Could not find or load main class).
- В результате программа на Java находится не в пакете по умолчанию. Компилятор Java сгенерировал класс в некотором пакете (ошибки компиляции нет), а при запуске виртуальная машина Java не смогла найти этот класс, потому что искала в пакете по умолчанию (возникло исключение
- Выход за границы допустимой области памяти в программе на C++.
- Выход за границы массива, разыменование неправильного указателя, обращение к нулевому указателю.
- Переполнение системного стека.
- Эта причина является частой в случае рекурсии. Вообще, системный стек используется для размещения параметров функций, локальных переменных. Его размер, как правило, невелик и по умолчанию равен 1 МБ. При вызове функции стековая структура позволяет естественным образом сохранить текущие состояния всех локальных переменных и вернуться к ним, когда вызов завершится и управление вернётся в исходную точку. Если в алгоритме используется глубокая рекурсия, то размера стека может не хватить для хранения контекстов всех вызовов. Решений этой проблемы два:
- переписать алгоритм нерекурсивно (например с использованием своего стека, а не системного);
- увеличить размер системного стека, что делается по-разному для разных языков программирования (см. примеры для C++ (Visual Studio) и Java).
- Эта причина является частой в случае рекурсии. Вообще, системный стек используется для размещения параметров функций, локальных переменных. Его размер, как правило, невелик и по умолчанию равен 1 МБ. При вызове функции стековая структура позволяет естественным образом сохранить текущие состояния всех локальных переменных и вернуться к ним, когда вызов завершится и управление вернётся в исходную точку. Если в алгоритме используется глубокая рекурсия, то размера стека может не хватить для хранения контекстов всех вызовов. Решений этой проблемы два:
- Ошибка ввода-вывода (попытка открыть несуществующий входной файл).
- Нужно проверить правильность имени входного файла.
- Программа целенаправленно была завершена с ненулевым кодом выхода.
- В программе на C++ это может быть, если функция
main()
в C++ вернула ненулевой код (return (non-zero)
в функцииmain()
). Рекомендуется завершать функциюmain()
операторомreturn 0
(в старых компиляторах C++ это обязательно, современные компиляторы же подразумевают возврат нулевого кода автоматически). Также программу на C++ с произвольным кодом завершает вызовexit()
. - В программе на Java можно завершить процесс с произвольным кодом с помощью
System.exit()
.
- В программе на C++ это может быть, если функция
- Необработанное исключение.
- Причин возникновения исключений может быть масса. Например, если в Java функции
Integer.parseInt()
/Double.parseDouble()
была передана строка, содержащая пробельные символы (ASCII-коды 9, 10, 13, 32), выбрасывается исключениеNumberFormatException
.
- Причин возникновения исключений может быть масса. Например, если в Java функции
- Целочисленное деление на ноль.
- При выполнении деления нужно всегда думать, а не может ли делитель оказаться равным нулю. В то же время стоит отметить, что вещественное деление на ноль (в типах с плавающей точкой
double
,float
) по умолчанию не приводит к завершению программы, а даёт специальные значения+Inf
,-Inf
илиNaN
.
- При выполнении деления нужно всегда думать, а не может ли делитель оказаться равным нулю. В то же время стоит отметить, что вещественное деление на ноль (в типах с плавающей точкой
PE — Ошибка представления (Presentation Error)
Наиболее частая причина возникновения этой ошибки — не найден выходной файл. Возможно, вы забыли создать выходной файл и выводите ответ в консоль (он в таком случае игнорируется). Проверьте имена входного и выходного файла в вашей программе на соответствие условию задачи. Исторически сложилось, что в разных задачах входной и выходной файл именуются по разным правилам: input.txt и output.txt, in.txt и out.txt, input.in и output.out (обратите внимание, что нет расширения txt), [задача].in и [задача].out…
Для некоторых задач программа проверки (checker) дополнительно удостоверяется, что ваш вывод соответствует определённому формату, и выдаёт ошибку представления в случае, если это не так. Например, если в задаче нужно вывести число, а вы выводите строку. Или если в задаче нужно вывести сначала число k, затем k чисел, а ваше решение выводит число k и далее (k + 1) чисел (то есть решение выводит в файл лишние данные).
Также имейте в виду, что отлавливание исключений и других ошибок не должно быть самоцелью. Если исключение не обрабатывается каким-либо образом, обычно нет смысла его ловить по следующей причине. Аварийное завершение работы программы в результате ошибки во время выполнения приводит к вердикту «Ошибка во время выполнения», только если соответствующее исключение было «проброшено» наружу, а не «заглушено» на каком-то этапе. Если исключение отлавливается, но никак не обрабатывается, то в результате возникновения соответствующей ошибки следует ожидать вердикт «Ошибка представления» или же «Неправильный ответ» (реже).
WA — Неправильный ответ (Wrong Answer)
Для многих задач ответ однозначен, и проверяется просто побайтовое совпадение вашего выходного файла и сохранённого правильного ответа. Такая проверка требует строгого соблюдения формата файла, не допускает незначащих пробелов и пустых строк. Например, если правильный ответ имеет вид (пробелы обозначены символом ␣)
5 1␣2␣3␣4␣5
и решение вывело
5 1␣2␣3␣4␣5␣
(лишний пробел в конце второй строки), то будет получен вердикт «Неправильный ответ». Для некоторых задач написаны проверяющие программы (checker), которые к таким различиям лояльны и засчитывают ответы с лишними пробелами как правильные. Всегда точно следуйте формату файла и не выводите лишних пробелов, и проблем не будет.
После последней строки файла можно выводить или не выводить перевод строки — не важно. Есть две точки зрения в зависимости от того, с какой стороны смотреть на символ перевода строки:
- каждая строка завершается переводом строки, поэтому
n
в конце файла нужен; - перевод строки является разделителем между соседними строками, поэтому
n
в конце файла не нужен.
Первая точка зрения является общепринятой. Так, компилятор gcc, система контроля версий git и многие другие программы выдают предупреждение no newline at the end of file, если в самом конце файла нет символов новой строки. Обсуждение вопроса можно почитать на stackoverflow.
Поэтому рекомендуется придерживаться первого подхода и завершать все строки переводами строк.
Другие очевидные причины получения неправильного ответа:
- неверный алгоритм;
- ошибка в программе.
Бывает такое, что решение от запуска к запуску даёт разные ответы, или же правильно работает на одном компьютере и неправильно на другом. Такие случаи, как правило, связаны с ошибками в решениях.
OK — Принято (Accepted)
Программа работает правильно и прошла все тесты с соблюдением всех ограничений.
Если решение принято системой, это ещё не означает, что в его основе лежит правильный алгоритм. В любой момент могут появиться новые наборы входных данных, на которых будут заново протестированы все решения по задаче. Если ваше решение на самом деле не полностью верно и прошло только из-за недостаточно сильного набора тестов, оно может в будущем потерять статус «Принято».
CF — Ошибка тестирования (Check Failed)
Если указан номер теста, то программа успешно завершается на предложенном тесте (укладывается в отведённые время и память и не совершает ошибок во время выполнения), но результат не удаётся проверить из-за ошибок в программе проверки. Вашей ошибки в этом случае, возможно, никакой нет и после исправления программы проверки будет получен вердикт OK. Не исключены ещё два варианта: WA, PE.
Имейте в виду, что если ошибка тестирования возникает на первом же тесте, то на остальных Ваше решение не запускается вовсе. Соответственно, в этом случае после устранения ошибок программы проверки вердикты TLE, MLE, RTE также могут возникнуть в любом тесте, кроме первого.
Если же номер теста, на котором возникает ошибка тестирования, не указан, значит, программа проверки не была скомпилирована, а Ваше решение не запускалось вовсе. В этом случае правильным может быть любой вердикт, отличный от CF.
Если у Вас возникла ошибка тестирования, мы, скорее всего, это заметим достаточно быстро. Тем не менее, имеет смысл задать вопрос через пункт «Сообщения» в меню курса. Не забывайте выбрать задачу, которой касается этот вопрос.
SV — Нарушение безопасности (Security Violation)
Ошибка означает, что программа попыталась выполнить запрещённые действия.
К их числу относится попытка создания новых процессов. Вашим решениям запрещено запускать на выполнение другие программы. Например, в коде
порождается новый процесс командной оболочки cmd.exe и в нём выполняется команда pause. Пожалуйста, не пишите так, для достижения аналогичного эффекта можно использовать другие приёмы.
Особенности языков программирования
У каждого конкретного языка программирования есть свои особенности, о которых полезно знать. Далее рассмотрены отдельные особенности написания решений на разных языках программирования:
- C++;
- Java;
- C#;
- Python.
Выбор языка программирования
Разные задачи можно решать на разных языках. Часто для конкретной задачи тот или иной язык оказывается предпочтительным. Например, если в задаче требуются тяжёлые вычисления, то её может быть проще сдать на C++, чем на Java, за счёт более быстрой работы программы на C++ (для кода на Java могут потребоваться более изощрённые оптимизации, чтобы он прошёл по времени). С другой стороны, если задача требует проведения вычислений с большими целыми числами, выходящими за пределы диапазона 64-битных переменных, то есть «длинной арифметики», то решение существенно проще написать на Java, воспользовавшись готовым качественно написанным классом BigInteger
для операций с числами произвольной длины.
Конфигурация тестирующего сервера
Сервер, на котором осуществляется запуск решений, является виртуальной машиной, выполняющейся внутри Microsoft Hyper-V Server 2012 R2. Виртуальный компьютер работает под управлением Windows 7 Professional x64, оснащён процессором Intel® Core™ i3-4130 (Haswell, кэш 3 МБ, 3,40 ГГц, доступно только одно ядро) и 4 ГБ оперативной памяти. Для хранения входных и выходных файлов используется RAM-диск, чтобы обеспечить максимальную производительность ввода-вывода.
Языки программирования
На странице учебного курса в системе на вкладке «Компиляторы» можно ознакомиться с актуальным списком доступных языков программирования, версиями компиляторов и параметрами командной строки их вызова.
Размер системного стека явно не задаётся (используется размер по умолчанию). При компиляции кода на C++ включен режим оптимизации O2.
Содержание
- presentation error. Не могу найти причину ошибки в своём коде.
- Name already in use
- Data-Analysis-with-Python / Python / instructions / yandex_contest.md
- presentation error. Не могу найти причину ошибки в своём коде.
- Name already in use
- Data-Analysis-with-Python / Python / instructions / yandex_contest.md
presentation error. Не могу найти причину ошибки в своём коде.
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
1 13
5 3 1 3 5 2 5 3 1 3 5 2 56
#include
using namespace std;
int main() <
int n, x;
cin >> n;
int *p = new int[n + 1];
for (int i = 0; i > *(p + i); >
p[n] = ‘’;
for (int i = 1; i Лучший ответ
int main() <
int n, len;
cin >> n;
for (int i = 0; i > numbers[i]; >
Источник
Name already in use
Data-Analysis-with-Python / Python / instructions / yandex_contest.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
Copy raw contents
Copy raw contents
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
Также ошибка будет в таком фрагменте:
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода: print(‘str’ , print(‘123) и т.д.
- Проверьте наличие двоеточия после строчки с if, else, for, while ( if x>y: ).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print() , чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах input() или print() , т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок. Т.е. не нужно писать input(“Введите число: ”) или print(“Искомый результат: ”, res) (здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать просто input() или print(res) .
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки. При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек ( numpy , pandas , math , fractions , itertools и др.) не забывайте делать соответствующий import :
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е. Print() и print() – это разные функции). Например, 2^3 – неверная запись операции возведения в степень (нужно 2**3 ). Аналогично, Print(‘string’) – неверно, т.к. написано с большой буквы (верно print(‘string’) ).
- Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция write() принимает только одну строку в отличие от print() (который принимает сколько угодно параметров, а также именованные параметры вроде sep и end ). Также функция float() принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. запись float(«3,14») приведёт к ошибке (нужно float(«3.14») ).
- Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для lst=[1, 2, 3] обращение lst[500] вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаря d = <‘cat’: 3, ‘lion’: 2, ‘dog’: 7>вызовет ошибку обращение d[‘mouse’] (т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Источник
presentation error. Не могу найти причину ошибки в своём коде.
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
1 13
5 3 1 3 5 2 5 3 1 3 5 2 56
#include
using namespace std;
int main() <
int n, x;
cin >> n;
int *p = new int[n + 1];
for (int i = 0; i > *(p + i); >
p[n] = ‘’;
for (int i = 1; i Лучший ответ
int main() <
int n, len;
cin >> n;
for (int i = 0; i > numbers[i]; >
Источник
Name already in use
Data-Analysis-with-Python / Python / instructions / yandex_contest.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
Copy raw contents
Copy raw contents
Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.
Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.
В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.
Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.
Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.
Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.
Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.
После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.
Основная информация о задаче представлена на картинке:
Есть несколько типов вердиктов после отправки вашего ответа:
- OK — ответ/код правильный;
- WA — есть ошибка.
И другие. Подробнее про них вы можете прочитать здесь, а также ниже.
При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.
Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:
Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.
Типы ошибок в Яндекс. Контест и способы их устранения.
Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.
CE (Compilation Error)
Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:
- Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
Например, ошибочным будет такой код:
Также ошибка будет в таком фрагменте:
- Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
- Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода: print(‘str’ , print(‘123) и т.д.
- Проверьте наличие двоеточия после строчки с if, else, for, while ( if x>y: ).
PE (Presentation error)
Данная ошибка может возникать, если формат вывода программы неверный.
При возникновении этой ошибки рекомендуется проверить следующее:
- В Google Colab для вывода значения переменной достаточно указать просто её имя:
Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print() , чтобы вывести значение переменной:
- Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
- Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах input() или print() , т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок. Т.е. не нужно писать input(“Введите число: ”) или print(“Искомый результат: ”, res) (здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать просто input() или print(res) .
RE (Runtime error)
Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки. При возникновении этой ошибки следует проверить следующее:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
- Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
- При использовании сторонних библиотек ( numpy , pandas , math , fractions , itertools и др.) не забывайте делать соответствующий import :
- Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
- Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е. Print() и print() – это разные функции). Например, 2^3 – неверная запись операции возведения в степень (нужно 2**3 ). Аналогично, Print(‘string’) – неверно, т.к. написано с большой буквы (верно print(‘string’) ).
- Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция write() принимает только одну строку в отличие от print() (который принимает сколько угодно параметров, а также именованные параметры вроде sep и end ). Также функция float() принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. запись float(«3,14») приведёт к ошибке (нужно float(«3.14») ).
- Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для lst=[1, 2, 3] обращение lst[500] вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаря d = <‘cat’: 3, ‘lion’: 2, ‘dog’: 7>вызовет ошибку обращение d[‘mouse’] (т.к. такого ключа в словаре нет)).
WA (Wrong answer)
Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.
Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.
В случае возникновения этой ошибки, проверьте следующие моменты:
- Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
- Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
- Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
- Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
- Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
- Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.
Источник
Решаю вот эту задачу(пробный контест):
A. Быстрый старт
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
В этом году третий раз одна известная компания проводит соревнование по программированию искусственного интеллекта для игровых стратегий. В этот раз участникам предложили написать искусственный интеллект для управления командой хоккеистов. Вася решил побороться за главный приз. Прочитав раздел “Быстрый старт”, он приступил к делу. Не прошло и нескольких часов, как хоккеисты начали ездить за шайбой по площадке. Но Вася заметил, что не всегда у игрока получается взять шайбу. Перечитав внимательно документацию, он выяснил, что для расчета вероятности подобрать шайбу нужно подсчитать коэффициент, равный максимальному значению из двух характеристик хоккеиста — ловкости D и подвижности A. Помогите Васе по известным значениям ловкости и подвижности определить этот коэффициент.
Формат ввода
Во входном файле заданы два целых числа D и A (0 ≤ D, A ≤ 109) — ловкость и подвижность хоккеиста соответственно.
Формат вывода
В выходной файл выведите коэффициент
Пример 1
Ввод Вывод
100 64 100
Пример 2
Ввод Вывод
31 14 31
Код:
Python | ||
|
выводит ошибку Run-time error
хотя при проверке вроде все работало
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Тренируюсь решать задачи Яндекса.
Вот условие:
Дан упорядоченный по неубыванию массив целых 32-разрядных чисел. Требуется удалить из него все повторения.
Желательно получить решение, которое не считывает входной файл целиком в память, т.е., использует лишь константный объем памяти в процессе работы.
Первая строка входного файла содержит единственное число n, n ≤ 1000000.
На следующих n строк расположены числа — элементы массива, по одному на строку. Числа отсортированы по неубыванию.
У меня возникает Runtime error, а из-за чего — не могу понять. Не сказано же какая. В чём может быть проблема?
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class WooHoo {
public static void main(String[] args) throws Exception {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(r.readLine());
int prev = Integer.parseInt(r.readLine());
System.out.println(prev);
for (int i = 1; i < n; i++) {
int cur = Integer.parseInt(r.readLine());
if (prev == cur) {
continue;
} else {
prev = cur;
System.out.println(cur);
}
}
}
}
Search code, repositories, users, issues, pull requests…
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up