Сообщение | Кратко | Сообщается ли номер теста? | Значение вердикта | Возможная причина |
---|---|---|---|---|
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);
}
}
}
}
Контекстная реклама — уникальный канал привлечения целевой аудитории на сайт за счет возможности взаимодействовать с пользователями со сформированным спросом, которые ищут продукт «здесь и сейчас». Для этого используется поисковая реклама с таргетингом по ключевым фразам. Кроме того, контекст позволяет охватить аудиторию на самых разных стадиях принятия решения о покупке с помощью рекламы в партнерской сети (РСЯ).
Настройка рекламных кампаний может показаться несложной на первый взгляд, поэтому многие предприниматели решаются на самостоятельный запуск, что часто приводит к неэффективному расходованию маркетингового бюджета. За более чем семилетнюю практику я провел аудит огромного количества кампаний и в этой статье расскажу о типичных ошибках, которые совершают рекламодатели при создании и управлении кампаниями в Яндекс.Директ, чтобы вы могли их избежать.
Вся контекстная реклама в eLama
Один кабинет и кошелек для рекламы в Яндекс.Директе и Google Ads, инструменты для повышения эффективности, бесплатное обучение и помощь на всех этапах работы.
Зарегистрироваться
Часть 1. Ошибки при работе с семантикой
Парсинг тысяч ключевых фраз
Парсинг семантики «вглубь» для поисковых кампаний – это правильно. Благодаря использованию более низкочастотных и точных ключевиков можно точнее управлять ставками, перераспределять бюджет на самые эффективные фразы, создавать максимально релевантные объявления и посадочные страницы под конкретные запросы пользователей. Однако нет никакого смысла на первых этапах собирать и парсить «холодную семантику», околотематические фразы, запросы с единичной частотностью по Вордстату.
Например, если предприниматель занимается подбором подержанных автомобилей, его первая поисковая рекламная кампания должна состоять из целевых фраз: подбор авто, подобрать автомобиль, выездная диагностика машин и тд. Не стоит сразу запускать рекламу по фразам: бу авто, авто ру, купить авто. Да, эти ключевики, скорее всего, охватывают потенциальных клиентов предпринимателя, но вероятность того, что человек, который прямо сейчас ввел запрос «купить авто в москве», заинтересуется услугой подбора автомобиля, достаточно низкая.
Я не говорю, что по этим запросам не нужно запускать рекламу, просто стоит отложить их до того момента, когда вы протестируете наиболее целевой спрос. Еще позже можно дойти до запросов «какой автомобиль купить за 700 000», «надежные бу авто за 500 тысяч» и т.д. Реклама по ним может быть рентабельна и приносить прибыль, но воронка продаж должна быть другой. Подобрать наиболее целевые ключевые фразы для первой кампании вам помогут коммерческие добавки, такие как: купить, заказать, доставка, прайс, оптом и т.д. Иногда коммерческой добавки может не быть, как в примере с подбором авто. Главное понимать, на какой сегмент аудитории вы нацеливаетесь, в какой степени у этих пользователей сформирован спрос на ваш товар или услугу, и начинать с тех, кому надо было уже вчера.
Использование слишком общих высокочастотных фраз
Некоторые специалисты по контекстной рекламе используют при запуске кампаний следующий подход: добавляют в качестве ключевых фраз верхнеуровневые высокочастотные ключевые фразы, а потом вычленяют из отчета наиболее эффективные поисковые запросы, добавляя их в качестве ключевиков в новую кампанию. Этот метод имеет право на существование, но только в том случае, если у вас есть бюджеты, которые вы готовы слить на нецелевые клики.
Например, компания занимается изготовлением кухонь на заказ. Не стоит использовать в качестве ключевой фразы слово «кухня», если вы не готовы тратить деньги на пользователей, которые искали сериал или передачу. Лучше подобрать более целевые запросы.
Отсутствие минус-слов
Минус-слова позволяют отсечь показы рекламных объявлений по нецелевым запросам. Такие слова нужно обязательно собирать на этапе парсинга семантики, а также при мониторинге отчета по поисковым запросам пользователей. Кстати, это довольно частое заблуждение: многие рекламодатели считают, что после создания и запуска кампании можно расслабиться, подкидывать деньги на рекламу и обрабатывать входящие заявки – всё само будет работать. На самом деле, после запуска работа над кампанией только начинается.
В примере выше рекламодатели не добавили минус-слово «адская», из-за чего я увидел их объявления по запросу, связанному с телепередачей. Бывает, что некоторые слова для исключения невозможно найти на этапе сбора семантики из-за того, что они крайне редко используются. В этом случае задача рекламодателя найти все нерелевантные запросы в отчете Яндекс.Директа и добавить минус-слова уже после запуска кампании.
Нет кросс-минусации в Поиске
Кросс-минусация позволяет убрать пересечения между ключевыми фразами в одной или нескольких кампаниях. В Яндекс.Директе сейчас кросс-минусовка происходит автоматически при создании кампании в веб-интерфейсе, но если вы ее загрузили из Excel или Коммандера, обязательно проверьте отсутствие пересечений. Это можно сделать за пару кликов в Директ Коммандере или сервисе eLama.
Кросс-минусовка нужна для того, чтобы по поисковым запросам пользователей отрабатывали правильные ключевые фразы и соответственно были показаны релевантные объявления с целевыми посадочными страницами. Например, будет правильно разводить пользователей по поисковым запросам «купить кухню» и «купить угловую кухню» на разные страницы сайта: по второму запросу желательно сразу показать информацию именно про угловые кухни.
На примере ниже первый рекламодатель добавил ключевую фразу в первый заголовок, благодаря чему он выделен полужирным, а также по клику приземляет посетителей сразу на страницу с заголовком «Угловые кухни по цене смартфона». Это верная стратегия, которая может давать отличные результаты.
Сама кросс-минусация выглядит так:
купить кухню -угловая
купить угловую кухню
Часто в кампаниях рекламодателей я замечаю неправильную кросс-минусовку, которая может значительно снижать охват. Выглядит она таким образом:
купить кухню -угловая -спб
купить угловую кухню спб
Если в кампании нет промежуточных ключевых фраз «купить угловую кухню» и «купить кухню спб», то мы потеряем по ним показы, так как для более общей фразы «купить кухню» добавили минус-слова «угловая» и «спб».
Правило: кросс-минусация производится только между ключевыми фразами, отличающимися на 1 слово.
В примере выше для корректной минусовки стоит добавить еще два промежуточных ключевика:
Купить кухню –угловая -спб
Купить кухню угловую -спб
Купить кухню в спб -угловая
Купить кухню угловую в спб
Ошибки в работе с семантикой в РСЯ
Работа с семантикой в рекламной сети Яндекса отличается от работы с поисковыми кампаниями. Это связано с самим принципом работы РСЯ-кампаний: объявления показываются на сайтах-партнерах пользователям на основании тематики площадки или поведенческих характеристик (истории поиска и посещения различных сайтов). Следовательно, в РСЯ не нужно добавлять большое количество низкочастотных ключевых фраз с длинными хвостами, если уже добавлены базисы, от которых они образованы. Например, если вы добавили фразу «подбор автомобиля», нет смысла добавлять фразу «подбор автомобиля в москве недорого».
Кроме того, не стоит добавлять в РСЯ-кампании весь список минус-слов, который вы собрали для поиска, поскольку это снизит охват кампании. Достаточно использовать наиболее противоречивые минус-слова: работа, вакансии, реферат, контрольная, дипломная, смерть, трагедия. Делается это для того, чтобы отсечь показы на площадках с этим контентом.
Автоматическая кросс-минусовка фраз в РСЯ также не нужна. Хотя, если вы правильно подберете семантику, то, скорее всего, системе практически нечего будет минусовать. Однако, если вам необходимо показывать разным пользователям разные креативы, приземлять их на разные страницы сайта, имеет смысл делать перекрестную минусовку между группами объявлений. Например, в одну группу я добавлю фразы «купить угловую кухню», «заказать угловую кухню» и буду показывать информацию именно про угловые кухни. Тогда в другую группу я добавлю фразы «купить кухню», «заказать кухню» и минус-слово «угловая» на уровне группы.
Часть 2. Ошибки в настройках рекламной кампании
Временной и географический таргетинг
Первая частая ошибка — отключение показов ночью и в выходные или включение рекламы в какие-то определенные часы, например, с 9 до 18. Если у вас нет накопленной статистики, на основании которой вы делаете подобные настройки, обязательно протестируйте рекламу 24/7. Вполне возможно, что активность вашей целевой аудитории будет максимальной именно в те часы и дни, которые вы планировали отключить. Главное, реализуйте на сайте возможность оставить заявку в то время, когда вы не готовы отвечать на звонки.
Будьте аккуратны при настройке географического таргетинга, выбирайте только те регионы, где находится ваша целевая аудитория. Если вы планируете запускать поисковую рекламу по всей России, советую создать две дополнительные кампании с таргетингом на Москву и Санкт-Петербург, поскольку в этих городах высокий уровень конкуренции и могут быть завышены ставки/цены клика.
В настройках есть по умолчанию включенный чекбокс «расширенный геотаргетинг». Рекламодатели часто не обращают на него внимание. При включенной опции объявления могут быть показаны не только в выбранном регионе, но и в любом другом, если пользователь введет запрос с целевой геодобавкой. Например, геотаргетинг — Москва. Пользователь находится в Петербурге и вводит запрос «грумер мск». Директ может показать объявление московского рекламодателя. В некоторых тематиках эта функция будет приводить дополнительный целевой трафик, но не во всех. Решите, нужны ли вам показы в других городах. Если сомневаетесь, оставьте расширенный геотаргетинг включенным, а после накопления статистики, проверьте эффективность рекламы в срезе по местоположениям.
Использование дополнительных релевантных фраз и автотаргетинга на старте
Дополнительные релевантные фразы (ДРФ) включены по умолчанию в специальных настройках кампании. Причем задан расход в размере 40% от общего расхода всей кампании.
При включенной опции Яндекс.Директ подбирает дополнительные ключевые фразы и поисковые запросы на основе добавленных рекламодателем ключевиков. Иногда эффективность подобранных фраз не удовлетворяет заданным критериям. Поэтому, если вы хотите запускать первые кампании по максимально точной коммерческой семантике, которую подобрали самостоятельно, стоит отключить показы по дополнительным релевантным фразам. Если захотите протестировать возможности автоподбора фраз, включите ДРФ на 10% от общего расхода и обязательно укажите цели для оптимизации.
Автотаргетинг — это «бесфразный» таргетинг в Поиске и РСЯ. Система самостоятельно подбирает поисковые запросы (поиск) и аудиторию (РСЯ) на основе анализа ваших рекламных объявлений и посадочных страниц. По умолчанию автотаргетинг выключен. Включить его можно на уровне группы объявлений. Иногда рекламодатели включают эту опцию, чтобы избавиться от рутинной работы по сбору семантики.
Я рекомендую все же изначально запускать кампании по подобранной семантике, а автотаргетинг включить через пару месяцев в случае наличия свободного бюджета на эксперименты. Система может найти целевые запросы и пользователей, которые не были охвачены при настройке кампании, что даст вам дополнительный прирост конверсий за счет одного клика. Обычно в автотаргетинг попадает большое количество достаточно общих тематических запросов, которые рекламодатель не стал бы использовать в первой кампании.
Яндекс.Директ не связан с Яндекс.Метрикой
Очень часто при аудите рекламных кампаний я вижу, что рекламодатели не указывают счетчик Метрики в настройках. Кто-то вообще не настраивает веб-аналитику, кто-то использует для аналитики Google Analytics, проставляет UTM-метки и игнорирует Яндекс.Метрику. Это очень серьезная ошибка.
Указание счетчика Метрики в параметрах кампании позволяет передавать в полном объеме данные о кликах из Директа и данные о целях и сегментах из Метрики в Директ. Это означает, если Метрика не связана с Директом, вы не сможете оценивать эффективность рекламы в отчетах Директа, использовать автостратегии, основанные на конверсиях, настраивать ретаргетинг по целям и сегментам Метрики. Помимо прочего, рекламодатель не сможет указать ключевые цели, на основании которых система будет оптимизировать ставки в Поиске и сетях. Опция оптимизации неотключаемая, поэтому влиять на ее эффективность можно только через ключевые цели. Пожалуйста, не запускайте рекламные кампании без настроенной аналитики.
Часть 3. Типичные ошибки при создании объявлений
Создание объявлений без анализа конкурентов
Я не буду учить вас делать конкурентный анализ, но перед созданием объявлений обязательно посмотрите, что пишут в своих креативах конкуренты, и постарайтесь сделать более привлекательное предложение для потенциальных клиентов. В Поиске пользователи не всегда вчитываются в текст объявлений, но заголовки читают всегда. Первый заголовок должен быть максимально релевантным поисковому запросу, чтобы человек понял, что нашел именно то, что искал. Второй заголовок стоит использовать для привлечения внимания и создания желания кликнуть. Именно здесь стоит писать про акции, спецпредложения, уникальные условия, УТП, УЦП, призывы перейти на сайт и узнать подробнее и т.д. У вас есть всего несколько секунд на то, чтобы заинтересовать пользователя.
В примере выше можно заметить, что все рекламодатели используют в объявлениях предложение со скидкой 50 или 70%. Проценты скидки не всегда играют решающую роль, потенциальный клиент будет принимать решение по совокупности цены, условий оказания услуги, отзывов и других факторов. Но в рекламных объявлениях подобные триггеры работают хорошо. Самое главное — это связка объявление-посадочная страница. Если в объявлении написано «Скидка 70%», то это обязательно должно быть указано на посадочной странице, иначе пользователь решит, что его ввели в заблуждение. Сказать, что будет работать лучше всего в той или иной тематике и регионе нельзя – вам нужно поэкспериментировать с заголовками и текстами, чтобы найти оптимальный вариант.
Пренебрежение расширениями
Расширения или дополнения – это элементы, которые делают объявление более заметным и позволяют ему попадать во всевозможные варианты рекламной выдачи (трафареты). К дополнениям относятся быстрые ссылки с описаниями, уточнения, визитка, цена, отображаемая ссылка, диалоги, данные Яндекс.Маркета и справочника. Некоторые рекламодатели пренебрегают добавлением расширений из-за чего теряют часть показов и кликов. На картинке ниже выделены дополнения к объявлению о груминге. Представьте, как бы оно выглядело, если бы рекламодатель не заполнил все элементы. Не забывайте про это.
Объявления для РСЯ по образу и подобию поисковых
Это также одна из часто встречающихся ошибок. Например, когда в объявления для РСЯ добавляют ключевые фразы в заголовок или используют шаблон автоподстановки ключевиков. Главная задача объявления в РСЯ – это привлечь внимание пользователя и замотивировать его узнать подробнее о предложении на сайте. Привлечь внимание можно с помощью яркой, сочной картинки. А заголовок и текст используются для того, чтобы напомнить о том, что он недавно искал, и предложить оптимальное решение. Например, на картинке показать уютный светлый салон, где грумер сделал необычную, красивую стрижку пуделю, а в объявлении написать: «Хотите, чтобы ваш пудель выделялся? Наш грумер творит чудеса! Узнайте подробнее.» Остается только нацелить это объявление на владельцев пуделей. Кстати, сейчас я описал пример персонализации рекламных предложений для различных сегментов аудитории. Владелец пуделя скорее среагирует на картинку с пуделем, чем на что-то другое, используйте это.
Не ограничивайтесь одним объявлением в группе. Для поисковых кампаний создавайте минимум два, а в сетях примените весь ваш креатив и фантазию для создания шести-десяти разные вариантов объявлений на группу.
Часть 4. Ошибки в управлении ставками
В управлении ставками обычно встречается две основные ошибки: погоня за первой позицией в поиске и использование автостратегий Яндекса без нормально настроенной аналитики или без достаточного количества данных. Обе ошибки ведут к неэффективному расходованию бюджета.
Погоня за первым местом в Поиске
С этой проблемой сталкивались практически все специалисты по контекстной рекламе: запускаешь кампанию, а на следующий день клиент звонит и спрашивает, почему его объявление на третьей позиции, а не на первой. Дело в том, что управлять ставками нужно не от позиций, а от статистики. Часто бывает, что расчет искренней ставки не позволяет конкурировать за максимальный трафик, и это нормально. Нет никакого смысла завышать ставки с целью обогнать конкурентов, если это будет нерентабельно. Кроме того, аукцион в Яндекс.Директе устроен таким образом, что на позицию влияет не только ставка, но и коэффициент качества объявления и прогнозный CTR. Причем эти показатели не отображаются в интерфейсе и рассчитываются прямо в момент аукциона, когда конкретный пользователь ввел запрос. Поэтому совет прост: рассчитывайте выгодные цены клика и не работайте в минус. Поможет вам в этом калькулятор искренней ставки, разработанный специалистами eLama.
Использование автостратегий Директа без достаточной статистики
В Директе есть полностью автоматические стратегии, которые могут управлять ставками за рекламодателя. Нужно лишь указать KPI, на которые система должна ориентироваться. Для того, чтобы включить стратегию, нужно настроить счетчик Метрики, создать в нем цели и связать его с Яндекс Директом. Система позволяет подключать автостратегию без достаточного количества данных по целям, в этом случае вы увидите уведомление в интерфейсе, что целевых визитов мало.
Подобное уведомление говорит о том, что алгоритму потребуется больше времени на обучение (несколько недель) и в этот период заданное условие по цене конверсии может не выдерживаться. На практике, если конверсий мало, система может никогда не прийти к заданному значению и расходовать бюджет неэффективно. В этом случае вы можете настроить дополнительные промежуточные микроцели в Яндекс Метрике, для того, чтобы данных для обучения было больше. Но у этого подхода есть минус: стоимость конкретного целевого действия на сайте определить несложно, а вот рассчитать единую цену конверсии по смешанному набору целей гораздо проблематичней. Поэтому зачастую рекламодателям с небольшими бюджетами, малым количеством переходов на сайт и конверсий, эффективнее использовать бид-менеджеры и оптимизаторы. Бид-менеджер eLama позволяет настроить автоматическое управление ставками с заданными лимитами по цене клика на всю кампанию или для каждой фразы. Это значит, что рекламодатель может самостоятельно рассчитать искренние ставки для разных фраз, исходя из их эффективности, и настроить шаблон, по которому биддер будет удерживать объявления на максимальных позициях, не превышая заданные пределы цены клика.
Автостратегии рекламных систем становятся умнее, но добиться максимальной эффективности могут далеко не всегда. Рекомендую протестировать ручное ставками с бид-менеджером в течение пары месяцев, набрать статистику по конверсиям, а затем переключить кампанию на автоматическую стратегию для теста возможностей системы.
Выводы
Яндекс.Директ может работать эффективно и приносить прибыль. Для этого необходимо выстраивать полноценную работу со всеми инструментами системы, настраивать веб-аналитику, анализировать статистику и не допускать типичных ошибок, о которых я рассказал в этой статье. У клиентов сервиса eLama, есть отличный инструмент, который позволяет в любой момент проверить новые или действующие рекламные кампании на ошибки и получить рекомендации по повышению эффективности кампаний. Вы можете воспользоваться этим инструментом бесплатно.
Решаю задачи из Яндекс.Контест, не могу понять в чем ошибка.
Требуется найти в бинарном векторе самую длинную последовательность единиц и вывести её длину.
Желательно получить решение, работающее за линейное время и при этом проходящее по входному массиву только один раз.
Формат ввода
Первая строка входного файла содержит одно число n, n ≤ 10000. Каждая из следующих n строк содержит ровно одно число — очередной элемент массива.
Формат вывода
Выходной файл должен содержать единственное число — длину самой длинной последовательности единиц во входном массиве.
Код проходит два теста, на третьем — ответ неверный. Помогите разобраться в чем проблема.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin
});
let values = [];
rl.on('line', (line) => {
values.push(+line);
}).on('close', () => {
const lengthes = [];
let count = 0;
for (let i = 0; i <= values.length; i++) {
const value = values[i];
if (value === 1) {
count = count + 1;
} else {
if (count !== 0) {
lengthes.push(count);
count = 0;
};
};
};
let maxLength = lengthes.length != 0 ? Math.max(...lengthes) : 0;
process.stdout.write(maxLength.toString());
});
Я разделил ошибки в контекстной рекламе на две группы:
- Самые распространенные ошибки в целом.
- Ошибки при работе с автостратегиями.
Самые распространенные ошибки в Яндекс.Директ
Отсутствие релевантности запроса и целевой страницы
Это очень частая ошибка, когда не работает контекстная реклама. Пользователь использует конкретный запрос, а ему показывают связанные товары, но не конкретно тот, который ищет потенциальный клиент. По таким запросам обычно низкая конверсия.
Это могут быть:
- Слишком общие запросы. Их использовать достаточно опасно как минимум до того, пока вы не наладили саму рекламу, не получили конверсию и не используете этот запрос в качестве эксперимента.
- Непонимание продукта.
- Слишком много информационных запросов. Это часто пересекается с общими запросами.
Некорректное A/B тестирование
Часто встречается такая ситуация, когда вразнобой тестируется сразу множество элементов, например, заголовок, текст, изображение и посадочная страница одновременно. В таком тестировании будет абсолютно непонятно, что именно работает лучше. Тестировать всегда нужно только один элемент (только заголовок, только текст и т.п.).
Также неправильно тестировать слишком похожие элементы. Например, объявления имеют одинаковые выводы, но текст написан немного по-разному, или используются слишком похожие изображения.
Некорректное использование корректировок ставок
Когда речь идет об одном типе, например, ЦА, и если она попадает сразу в несколько вариантов, то необходимо применять только одну корректировку. Например, мы добавляем две корректировки: «Посетили сайт без заявки» (добавляем 20%) и «Директ Отказы» (убавляем 100%). Второй случай – это, как правило, люди без заявки.
Отсутствие мобильных объявлений
Это старая проблема, далеко не все понимают, зачем они вообще нужны. Важно учитывать, что в мобильных объявлениях заголовки работают по другому принципу – 56 + 30 символов (первый и второй заголовок объединяются). Плюс в том, что для пользователей телефонов можно создать объявление, которое будет длиннее и четче донесет оффер.
Отключение ретаргетинга для тех, кто совершил конверсию
Многие смеются над тем, что уже заказали тот или иной товар, а его до сих пор показывают. Смысл может быть для e-commerce, но если речь идет про B2B или услуге, при выборе которой потенциальный клиент думает в течение какого-то времени, например, оставил заявку, но все еще размышляет над тем, делать заказ или нет. И если вы после оставления заявки сразу же прекращаете для него показ рекламы, то пользователь, думая о приобретении товара или услуги, будет видеть объявления ваших конкурентов, которые могут перехватить вашего лида.
Не используется автостратегия
По данным Яндекса, на данный момент 75% всей рекламы – это автостратегия (по расходу бюджета).
Ошибки при работе с автостратегиями
Работаете по-старому и используете «тонкую» настройку
Такая настройка в автостратегиях практически никогда не работает и просто убивает охват. Сейчас у директа охват намного важнее: чем больше показов и конверсий, тем больше лидов вы получите. При сокращении охвата чаще всего конверсии оказывается недостаточно. Если бюджет ограничен или у вас мало конверсий, лучше укрупнять кампании: объединять регионы, услуги, таргетинги.
Самая главная задача здесь – скормить алгоритму как можно больше конверсий.
Ограничиваете бюджет
При автостратегиях лучше вообще убирать дневной бюджет. У нас есть кампании с недельным бюджетом, и мы работаем по ним.
Используете «Тонкую настройку» Мастера кампаний
Это инструмент, который изначально создавался для быстрого и упрощенного запуска рекламных кампаний, но сейчас он активно используется отдельными специалистами и агентствами из-за того, что дает хорошие результаты.
Несмотря на то, что это своего рода «черный ящик» и там практически нечем управлять и нечего анализировать, ошибки можно совершить и здесь. Самые распространенные: указание фраз и интересов (тут лучше работает автоматический подбор аудитории), неправильно используемая схема при создании текстов (используйте такую: Маска запроса + выгода).
Позволяете Мастеру кампаний съедать работающие кампании
Это самая неприятная черта инструмента. При запуске мастера необходимо провести кросс-минусовку с работающими кампаниями, чтобы мастер не забрал конверсии с них, иначе придется за них платить дополнительно. Также нужно ставить в минус брендовые запросы.
Учитывайте, что помимо обычного Мастера кампаний есть товарный, который очень любит отъедать трафик у смарт-баннеров. Если они у вас работают хорошо, разграничьте их через фильтры.
Не помогаете автостратегиям обычными кампаниями
Очень часто при обучении алгоритм он отключает какую-то аудиторию, которая раньше работала, даже если дает конверсии. При полном переходе на автостратегии можно потерять конверсионную аудиторию. Это может быть: IOS пользователи, выгодная демография, выгодные регионы и выгодные вам товары.
Не боретесь с «ложными заявками»
Казалось бы, что автостратегии – это идеальная система: нужно платить только за заявки. Но есть проблема – это так называемые «ложные заявки», их бывает достаточно много и по разным направлениям. Самый простой способ борьбы с этим – платить только за квалифицированных в CRM конверсии.
Т.е. необходимо связать метрику, сайт и вашу CRM и использовать в оплатах оффлайновую конверсию: менеджер подтверждает в CRM все заявки с сайта, когда они переходят на другую стадию сделки, и мы платим только за них. Это идеальный вариант, т.к. он позволяет отсечь ложные заявки. Но у этого способа есть и минус: конверсия уменьшается, и он не сработает, если у вас в принципе мало конверсии, кампании просто не смогут разогнаться.
Также можно платить за отдельные конверсии, например, за уникально целевые звонки.
Хотите тоже написать статью для читателей Yagla? Если вам есть что рассказать про маркетинг, аналитику, бизнес, управление, карьеру для новичков, маркетологов и предпринимателей. Тогда заведите себе блог на Yagla прямо сейчас и пишите статьи. Это бесплатно и просто