Как готовить себя к олимпиадному программированию?

Как говорится "лулзов для" пару месяцев назад решил поучаствовать в школьной олимпиаде по информатике, довольно просто прошел на городской этап. С удивлением для себя победил там, и теперь через месяц еду на край. Собственно, всё бы ничего, но я НИКОГДА не занимался олимпиадным программированием, не участвовал в олимпиадах, не знаю паттернов, не знаю алгоритмов, пишу хоть и работающий, но плохо пахнущий код. Т.к лицом в грязь мало кто любит падать (я не исключение), нужно готовится, и вот в этом суть вопроса. Как за месяц поднять скилл так, что-бы занять призовое место? Ну или хотя-бы не последнее.
  • Вопрос задан
  • 60789 просмотров
Решения вопроса 1
Посмотрите данные темы:
Длинная арифметика
Динамическое программирование
Теория графов
Рекурсия, перебор
Сортировка и последовательности
Комбинаторика
Простая математика
Геометрия
Целочисленная арифметика
Математическое моделирование
Жадный алгоритм
Структуры данных
Двумерные массивы


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

Архив задач и тренировка здесь:
acmp.ru
acm.timus.ru
Codeforces
Это очень полезные ресурсы (системы проверки), в которые входят очень интересные и трудные задачи, как раз предназначенные для олимпиадного программирования.
Ознакомьтесь здесь:
Олимпиадное программирование для новичков

Набор языков программирования в каждой системе разный. Вот некоторые из них:
Набор яп для тимуса
Для acmp.ru

Но для начала почитайте и разберите эти ресурсы/книги про алгоритмы:
algolist.manual.ru
Кормен Т., Лейзерсон Ч., Ривест Р., Штайн K. - Алг...

Ну и конечно, подтяните математику. Без математики далеко не уйдете.

Ответ на Ваш вопрос: для длинной арифметики подошел бы Java.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@denispalchuk
Согласен с предыдущими высказываниями. Для себя выбрал плюсы, ведь язык быстрый и гибкий. После школы преподаватель быстро показал что нужно делать:
1. Учишь Си ( после паскаля выучить синтаксис языка будет несложно, я думаю это займет не больше недели с полным осознанием). Там же узнаешь о рекурсии
2. Учишь Си++(Общее представление о классах, шаблонах)
3. Учишь STL, заодно заучивая структуры данных (очередь, стек, списки и т.д.)
Изучения тонкостей языка программирования на этом окончено. А дальше чисто по темам добиваешь. Основываясь на своём личном опыте, я бы тебе посоветовал учить именно в таком порядке:
-Графы
-Динамическое программирование
-Длинная арифметика
-Комбинаторика+Жадный алгоритм
Ну а дальше остальное со списка сверху
Ответ написан
Bringoff
@Bringoff
Android dev at Freelance
В свое время было что-то подобное. Только в украинском варианте названия другие - школьная, районная, областная, всеукраинская.
В школе кроме меня программирование фактически никто не знал, на уроках информатики в те года почему-то убрали даже основы какого либо языка. Да и я тогда знал только немного паскаля/delphi. Но лучше варианта не нашлось, так что пошел я (для приличия все задачки в школе все же решил). Спокойно прошел районный этап (было четыре человека, которые тоже непонятно как туда попали - одна девочка ушла через 20 минут). К областному этапу я уже готовился. Особой системы у меня не было - я просто решал задачи на acmp.ru, acm.timus.ru. При необходимости гуглил необходимый алгоритм и старался разобраться в его реализации. Помогал с задачами на одном форуме, иногда и сам спрашивал. В результате за приблизительно 2 месяца такой подготовки я занял второе место) Набрал 69 баллов из 100 (2 задачи решил полностью, 2 частично). Недавно общался с преподавателем своим - говорит, до сих пор меня вспоминают (типа приехал какой-то паренёк из провинции и отобрал призовое место у местных лицеистов). Но я, чесно говоря, своим результатом не слишком доволен, 2 месяца на подготовку -это мало. Да и готовиться надо было более систематично.
Что бы я точно изменил - писал бы не на паскале:) Сейчас бы я выбрал Java. Недавно вернулся к некоторым задачам на acmp.ru - те задачи, где на паскале надо было изворачиваться, на Java решались элементарно. Например, не пришлось реализовывать длинную арифметику. Кто-то говорил, что часто можно упереться в Time Limit, но, честно говоря, это так себе аргумент - для большинства задач указанного лимита времени для Java с запасом. Небезызвестный Петр Митричев в соревнованиях её использует и уже столько лет показывает результат.
Да, питона у нас в проверяющей системе на олимпиаде не было. Теоретически на нем можно было писать на своем компьютере, его бы потом проверяли вручную. Но без доступа у тестирующей системе таким образом решать задачи никто не решился.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы