Как готовиться к олимпиадам по информатике

Как готовиться к олимпиадам по информатике

Нас неоднократно спрашивали - а почему нет сообщества по информатике? А планируется ли открывать такое? Честно говоря, мы были бы не против. Но кого не спросим - все твердят, что смысла в таком сообществе нет, ибо есть куча крутых платформ. Сегодня мы попробуем сделать полноценный гайд по всем ресурсам, необходимимым для подготовки к олимпиадам по информатике.

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

А что же если вы только только начинаете? Вот подборка комментариев от опытных олимпиадников по информатике:

0) В школе на уроках информатики изучают: устройство компьютера, ПО, компьютерные сети, программирование, представление и измерение информации. Учатся работать с операционной системой и приложениями (Paint, Word, PowerPoint, Excel, Access и тп.). Но на олимпиадах по информатике дают задачи только на программирование.

1) В первую очередь надо выбрать язык программирования. В настоящее время на соревнованиях по программированию популярнее всего языки C++, Python и Java. Если вы только начинаете программировать, то знающие люди рекомендуют начать с Python 3, а после того как вы изучите основы и решите десятки задач, следует переходить на С++. Если у вас уже есть опыт на любом другом языке, то рекомендуется выбрать С++.

2) Прежде, чем приступить к изучению языка, вам следует установить специальные программы, с помощью которых вы сможете программировать. Для новичков которые выбрали Python → инструкция (скачается PDF файл). А если вы выбрали С++, то разберетесь сами → дистрибутивы.

3) В сети Интернет существует множество ресурсов, позволяющих изучать основы программирования самостоятельно. Перечислю несколько интернет ресурсов для подготовки к олимпиадам:

informatics.mccme.ru - содержит большое количество задач по программированию различного уровня. Во многих разделах есть ссылки на теоретический материал (Python, C++) по соответствующей теме; к большинству задач приложен подробный разбор. Для всех заданий доступна автоматизированная проверка решений.

pythontutor.ru - онлайн-учебник по основам программирования на языке Python.

Введение в программирование на C++ - бесплатный курс от академии Яндекса на stepik.org является одним из наиболее удачных онлайн-курсов.

Напишу несколько советов к прохождению этого курса. К каждой теме дается видеоурок, конспект и около 11 задач. В каждом шаге присутствуют комментарии. При решении задачи не следует сразу читать комментарии, потому что там часто пишут подсказки. Читайте комментарии если вы застрянете при решении задачи на минут 40-50. После решения задачи вы получите доступ к решениям других людей. Будет полезно постараться понять альтернативные решения. Если в одной теме вы решили 2/3 задач, то переходите к следующей теме, чтобы побыстрее приступить к изучению новой теории. Но при этом возвращайтесь регулярно к нерешенным задачам предыдущих тем.

algoprog.ru - платный полноценный курс для подготовки к олимпиадному программированию, который проводит старший разработчик Яндекса. Бесплатный доступ к плану подготовки, теоретическому материалу и отличному подбору заданий.

Весь материал в курсе распределен по уровням, от самого простого до очень сложного. Уровни нумеруются последовательными числами (1, 2, 3, ...), в пределах уровня также введены подуровни, нумеруемые буквами (в уровне 1 — подуровни 1А, 1Б, 1В и 1Г, и т.п.). Если планируете заниматься бесплатно, то на этом сайте регистрироваться не надо. Достаточно пройти регистрацию на informatics.mccme.ru. На algoprog.ru в каждом подуровне дается теория и подбор задач. Под каждой задачей имеется ссылка, пройдите по этой ссылке и решайте данную задачу на informatics.mccme.ru.

ProjectEuler - ресурс с более чем 700 задач разной сложности

BestProg - хороший ресурс с объяснением теории и примерами кода на С++

4) Советы:

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

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

5) Напоследок, в качестве мотивации, опыт олимпиадного программирования сильно поможет вам устроиться на работу программистом. В качестве меры измерения возьмем систему уровней с algoprog.ru. Условно, вы можете пройти собеседование алгоритмической секции в крупную компанию на 5 уровне, с отдельными темами более высоких уровней (со слов разработчика из Яндекс). Будучи студентом, чтобы пройти на стажировку в Google, Facebook и тд. необходимо уметь решать задачи примерно уровня заключительного этапа Республиканской олимпиады школьников (со слов программиста из Google).

P.S. Оставлю здесь ссылку для тех кто не хочет заниматься олимпиадным программированием, а просто хочет стать программистом → Что надо учить?