Как читать задачи по программированию

Составлением задач по программированию я занимаюсь уже более шести лет. За это время было написано более сотни задач, некоторые из которых до сих пор лежат в запасниках и не увидели свет. Из года в год, из контеста в контест я наблюдаю за одними и теми же ошибками начинающих программистов.

Сегодня речь пойдёт не об алгоритмических или технических ошибках, а о том, что на первый взгляд просто и очевидно. Поговорим об ошибках при чтении задач.

Я рассмотрю типичные ошибки при чтении и понимании задачи, которые допускают начинающие, а иногда и уже довольно продвинутые программисты, из-за которых теряется драгоценное время или выбирается неправильная стратегия.

Ура, я нашёл лёгкую задачу!

Одна из самых распространённых стратегических ошибок, которая может сказаться на результате — неправильный выбор самой лёгкой задачи.

Правилами соревнований чаще всего не регламентируется порядок расположения задач по сложности. Поэтому прежде чем радоваться тому, что при чтении комплекта встретилась задача, которая «уж точно простая» и конечно «я знаю как её решать» лучше дочитать всё до самого конца. Вполне возможно, что дальше есть задача, решение которой можно написать за несколько секунд.

Совет: прежде чем приступить к решению задачи, нужно прочитать все без исключения задачи.

Ура, попалась задача, которую я решал вчера/в прошлом месяце/на паре!

Зачастую составители задач действительно используют уже известные задачи, которые использовались на различных соревнованиях. Однако такой подход порождает множество штрафных попыток обрадовавшихся участников.

За счёт изменения нюансов задачи или даже одного числа — предельного ограничения, составитель задачи может не только изменить тонкости программирования задачи, но и значительно усложнить или упростить алгоритм. Такой подход очень часто применяется, когда в изначально переборной задаче увеличиваются ограничения на входные данные и задача перемещается в разряд проблем с квадратичной или даже логарифмической асимптотики.

Совет: увидев знакомую задачу внимательно перечитайте условия и следите за ограничениями на входные данные, пределы времени и памяти.

В каком порядке читать условие?

Наличие длинного условия задачи часто пугает начинающих программистов. Им начинается казаться, что большое количество слов в тексте эквивалентно большому количеству кода в решении. Встречаются случаи, когда это не так.

Аналогичная иллюзия возникает, когда участник видит довольно сложный формат и пример входных и выходных данных. Большое количество входных параметров ещё не означает сложность их обработки.

Совет: начинайте чтение задачи с формата входных и выходных данных. Затем ознакомьтесь с примером ввода-вывода. После этого читайте текст условия.

Я прочитал формат ввода/вывода и уже знаю как решать задачу!

По формату входных и выходных данных и примеру ввода/вывода действительно часто становится понятен алгоритм решения задачи. Однако этой уловкой пользуются и составители задачи, запрятав в самом тексте задачи тонкости, которые приведут к вердикту Wrong Answer на 55-м тесте. Разочарование от такого вердикта может надолго выбить из колеи.

Совет: не поддавайтесь на уловки составителей задач и обязательно читайте текст задачи, даже если на первый взгляд решение задачи очевидно.

Я не понимаю условие задачи!

Очень часто участник, прочитав условие задачи не может понять условие задачи или то, как получен пример входных и выходных данных. В таких случаях, особенно на школьных соревнованиях, принято засыпать жюри вагоном однотипных вопросов и получать обидное «Без комментариев» или «Смотри условие задачи».

Совет: задавайте жюри вопрос по условию задачи таким образом, чтобы был возможен только краткий ответ «Да» или «Нет». На другие вопросы оргкомитет имеет право не отвечать.

В примере ввода/вывода ошибка — это же очевидно!

Если вы уверены, что в примере входных и выходных данных содержится ошибка, внимательно перечитайте условие задачи. Если уверенность остаётся, посмотрите монитор контеста, вдруг кто-то уже решил эту задачу. Если вы первый и единственный участник, кто взялся за эту задачу, пересмотрите текст условия, возможно, ошибка уже исправлена. В противном случае в корректной форме укажите жюри на возможную ошибку.

Совет: отбросьте все сомнения: жюри — тоже люди!

Как читать условие задач по программированию.

В сегодняшней статье я постарался собрать наиболее типичные ошибки при чтении задач, с которыми сталкиваются участники соревнований по программированию, начиная от первых школьных контестов и заканчивая чемпионатом мира по спортивному программированию.

Конечно, есть и другие приёмы правильного прочтения задачи, которые можно рекомендовать более продвинутым участникам. Однако моя цель сегодня — дать совет спортсменам-программистам, только начинающим свой турнирный путь.

Остались вопросы — задавайте! С удовольствием на них отвечу.

Следите за новостями о спортивном программировании в Республике Коми на портале о спортивном программировании.

 

Комментарии:

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать следующие HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>