Отримання знань
дистанційна підтримка освіти школярів
Технические условия: На вход подаются два числа a, b (0 <= a, b <= 10). Вывести их сумму.
Анализ условия и разбор решения: Как правило во всех ACM подобных системах первая задач подобного плана приводиться как ознакомительная задача, для ознакомления со спецификой написания текста программы на избранном языке программирования, формате вводе-вывода, и морального самоудовлетворения вновь зарегистрированного участника.
Решение этой задачи приводиться обычно либо в самом тексте условия задачи (как это сделано на этом сервере), либо в разделе помощи на некоторых других. Приведем текст решения, взятого прямо с условия задачи:
#include "stdio.h"
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
}
- Accepted = AC - решение принято полностью и засчитано системой для участника как решенное полностью.
- Presentation Error = PE - Решение правильное, но отображается в неправильном формате. Такое решение не засчитывается.
- Time Limit Exceeded = TLE - Решение участника потребовало больше времени, чем указано в системе для конкретной задачи. Такое решение не засчитывается. Как правило время тестирования тесно связано с алгоритмом, используемым в решении, тактовой частотой процессора и даже его производителем. Очень часто один и тот же алгоритм или даже полностью решение, отправляемое для проверки под разными компиляторами одного и того же языка программирования может совсем неожиданно получить разную реакцию системы. (Это утверждение нами проверено для более чем 200-х разных задач в этой и других подобных тестирующих системах).
- Memory Limit Exceeded = MLE - Решение участника требует к реализации алгоритма больше памяти, чем указано в технических условиях конкретной задачи.
- Wrong Answer = WA - Неправильный ответ. Иногда эту же реакцию система выдает и на решения с правильным ответом, но неправильной организаций ввода-вывода.
- Runtime Error = RE или RTE - Ошибка во время выполнения программы. Обычно такие ошибки характерны в случаях обращения к несуществующим (не объявленным) элементам массивов, выход за пределы стандартных диапазонов и т.п. Более конкретно о причинах таких ошибок лучше всего узнать в справочной системе используемого компилятора выбранного для реализации алгоритма языка программирования.
- Output Limit Exceeded = OLE - Решение выводит больше данных (возможно среди них есть и правильные), чем ожидается системой. Обычно такие ошибки связаны с забывчивостью участников, которые некоторые участки кода, выводящие промежуточные или дополнительные данные, забывают "закомментировать" в своем решении или просто удалить из него.
- Compile Error = CE - Ошибка компиляции. Наиболее раздражающая участников ошибка. Она возникает обычно при использовании другой версии компилятора, не указании в коде служебных директив компилятору, использованию некоторых "слов", которые в конкретной системе запрещены, но участнику об этом не известно, и т.п.
- System Error - Системная ошибка. Обычно о таких ошибках, если они часто повторяются, администраторы систем просят им сообщать, если, естественно, подобная ошибка не была вами спровоцирована умышленно.
- Validator Error - Решения некоторых задач требуют запуска "валидатора" - специальной программы, написанной либо авторами задачи, либо администраторами системы, для проверки хода предложенного вами решения. Если ваше решение не корректно с точки зрения этой проверяюще-моделирующей программы, то вы получите именно такую реакцию системы.
Что же может быть интересного с точки зрения рассмотренных выше реакций тестирующей системы в такой простой задачи, как А+В ?
Оказывается, данная задача является немного "провокационной", так как засчитываться как АС будут и решения, в которых строки вывода выглядят:
либо так: printf("%d \n",a+b);
либо так: printf("%d \n",a+b);
и даже так: printf("%d ",a+b);
В тоже время добавление хотя бы одного пробела не только в конце ответа, а перед ним, даст реакцию системы РЕ. По нашему глубокому убеждению, и три выше приведенных варианта вывода ответа также должны давать РЕ, так как очень часто при решении других задач, особенно на олимпиадах школьников, именно такие ошибки в правильных алгоритмически решениях, но не совсем точных с точки зрения соблюдения формата вывода, влекут за собой значительную потерю баллов по задаче, а иногда вообще к не зачету ее решения.
В этом отношении более консервативно-требовательной выглядит система http://e-olimp.com.ua, в которой подобные решения не засчитываются. Связанно это с тем, что система ориентирована в основном на школьников, и привитие им "привычки" правильно выводить результат работы программы преследует за собой цель уменьшить количество подобных ошибок во время реальных школьных олимпиад, особенно областного (регионального) и республиканского (государственного) уровней.
Рекомендации: При решении задач на произвольно выбранной вами АСМ-подобной системе старайтесь не выводить лишних пробелов и заканчивать вывод ответа переводом строки, даже если сама система этого и не требует. Это поможет вам в дальнейшем сэкономить много времени и здоровья (нервов) при участии в конкретных соревнованиях по спортивному программированию. Более того, и при считывании данных желательно аккуратно считывать окончания строк.
В свете высказанных пожеланий в рассмотренном выше решении строка считывания входных данных также должна выглядеть так:
scanf("%d %d\n",&a,&b);
Обращаем внимание именно на этот момент, так как во многих других задачах в этой и других АСМ-системах не считывание перевода строки приводит либо к PE либо к WA.
Т.е. в идеале решение должно выглядеть приблизительно так:
#include "stdio.h"
int main(){
int a,b;
scanf("%d %d\n",&a,&b);
printf("%d\n",a+b);
}
Попередня | Зміст | Наступна |