Перейти к содержимому

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

  • автор:

Методика подготовки к олимпиадам по информатике

Чтобы научиться решать олимпиадные задачи по информатике, надо решать задачи по информатике. Естественно при этом заглядывая в соответствующею литературу.

Вопрос 2. Сколько необходимо решить задач, чтобы достойно выступать на олимпиадах по информатике?

Вопрос задан конечно не корректно и ответить на него, пожалуй вряд ли возможно, но сказать пару слов по этому поводу стоит. Как мне соощил специалист в области подготовки к олимпиадам ACM Михаил Медведев, то создать принципиально новую олимпиадную задачу не так то просто, как может показаться на первый взгляд. По этой причине, лица ответственные за проведения олимпиад просто берут задачи за прошлые годы и подают их под «новым соусом». Часто случается, что задачи для районных и зональных олимпиад по информатике «сдирают» без каких либо изменений с сайтов посвященных олимпиадному программированию.

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

Вопрос 3. Можно ли подготовить школьников к олимпиадам по информатике в рамках школьной программы?

Думаю, что это нереально. Всем давно известно, что школьный курс информатики — это одно, а олимпиады по информатике — это совсем другое. Да, в примерной программе по информатике, в 9 классе, довольно большое количество часов уделено изучению программирования. В учебнике Семакина для 9 класса обучение программированию основано на языке Паскаль, у Угриновича примеры дана применительно к Visual Basic . Но, даже если применить дифференцированный подход к обучению школьников, вряд ли этих часов хватит для подготовки к олимпиадам отдельных школьников с «нуля».

Вопрос 4. Если часов по программе не достаточно для подготовки школьникам к олимпиадами, то как тогда готовиться?

Вижу три варианта:

  • Кружок по программированию
  • Факультатив по программированию
  • Личный энтузиазм.

По первым двум вариантам все понятно, но должно быть понимание со стороны руководства школы. Частенько, между учителями бывает «битва за часы», на кружок или факультатив по программированию часов может и не перепасть.

Личный энтузиазм доведенный до крайней меры — это весьма пагубное, на мой взгляд, явление. Российское образование не должно держаться на энтузиазме. Иначе получается, что пока есть энтузиазм — дело идет, закончился запал и все рухнуло. На энтузиазме долго не протянешь, но его иногда стоит проявлять в надежде, что дело сдвинется с «мертвой точки».

Вопрос 5. У меня 25 (26, 30. ) часов основной нагрузки, реально ли еще заниматься с учащихся на кружке по программированию?

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

Вопрос 6. Могут ли школьники готовиться к олимпиадам во внеурочное время и если могут, то как лучше организовать подготовку?

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

Вопрос 7. Что требуется от учителя для качественной подготовки школьников к олимпиаде?

  • Умение учиться. Ведь как случается, закончил человек учебное учреждение и на этом его развитие в плане получения информации порой и заканчивается. Для работы в школе вроде хватит, так зачем еще заморачитваться.
  • Всегда быть на связи. У вашего ученика может возникнуть вопрос в любое время, есть ведь и такие, которые решают задачки по ночам. Если вам не спится, то почему бы, при возможности, ему не ответить при помощи той же «Аськи» или программы Skype .

Как решать олимпиадные задачи по программированию?

Пытаюсь решать олимпиадные задачи по программированию и столкнулся с тем, что не понимаю как это правильно делать.
Обычно они делятся на два типа — первые, те, которые я прямо сразу знаю как решать. И тут все решение — просто начинаю писать код, отлаживать и т.д., никаких проблем.
А вторые — те, для которых или не знаю решения или даже условие сходу не понимаю. (уровень сложных на hackerrank или F,G на codeforces) Как решать такие «правильно»? Правильно — в смысле, чтобы улучшать не только скилл кодирования, но и какую-то теоретическую часть?
Имеет ли смысл сначала попытаться придумать решение самому или сразу гуглить теорию?
Если гуглить не сразу, то через какое время (сколько попыток решения)?

  • Вопрос задан более трёх лет назад
  • 6204 просмотра

1 комментарий

Оценить 1 комментарий

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

Автор ruzana.miniakhmetova, 11 лет назад ,

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

«Недавно мы анонсировали конкурс задач по спортивному программированию. Организаторы конкурса попросили написать короткое объявление о конкурсе в блог ABBYY, но строгий редактор отказался печатать анонс без объяснения того, что же такое олимпиадная задача. Из этого родилась целая статья. Начнем, пожалуй, с олимпиадной задачи.

Первое, что бросается в глаза, это необычное условие. Такой подход сложился исторически: писать краткую математическую формулировку не принято. Обычно ее пытаются связать с реальной жизнью, ну или с не очень реальной. Например, в USACO героями всех задач являются фермер Джон и коровы. Прежде чем приступить к решению после прочтения условия, участнику требуется выделить математическую формулировку задачи.

Решением олимпиадной задачи является программа, написанная на одном из языков программирования. Самыми популярными языками являются: C++, C#, Java, Pascal. Возможно, вы скажете, что Pascal уже давно устарел. Однако не стоит его недооценивать! Опытные спортивные программисты способны писать на Pascal’е стандартные алгоритмы, которые уже есть в C++, быстрее, чем обычный человек прочтет условие задачи 🙂 Кстати, из-за того, что участники выбирают язык программирования самостоятельно, есть риск, что они делают неоптимальный выбор. Во-первых, решения существуют не на всех языках, а во-вторых, решения, написанные на некоторых языках, могут работать менее эффективно, чем на других.

Вернемся к обсуждению условия. Олимпиадные задачи очень формализованы:

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

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

Вообще существует два типа олимпиадных задач: «классические» и «эвристические». Классические задачи предполагают наличие точного строго доказанного решения. При решении эвристических задач участники соревнуются между собой, кто сможет получить лучшие ответы. Например, чье решение правильно распознает большее количество символов. Эвристические задачи обычно не имеют точных решений. Здесь они более всего близки к реальной разработке. Например, распознавание символов – вполне себе «эвристическая» задача.

Существует немало способов оценки решений для «классических» задач:

Оценки решений «эвристических» задач в каждом случае разрабатывается индивидуально. В эвристической задаче, которую предлагалось решить финалистам ABBYY Cup 2.0, нужно было разработать программу для классификации документов по тематикам. Решение проверялось на группе тестов, каждая из которых содержала некоторый набор текстов на разные темы. Всего было три тематики, и каждая из них была представлена в каждой группе в разном количестве. Выигрывал тот, чье решение прошло наибольшее количество групп тестов. При установке «эвристической» задачи на тестирующую платформу иногда приходиться ее дорабатывать, поскольку большинство тестирующих платформ «заточено» на оценку классических задач.

Конечно, говорить об особенностях олимпиадных задач можно бесконечно. Мы осветили лишь самые главные моменты. Если у вас есть вопросы или комментарии – добро пожаловать в комментарии. «

Теги

abbyy, конкурс задач, хабрахабр

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

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

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

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

Михаил Рубинчик
менеджер Образовательные программы СКБ Контур, тренер команд УрФУ по спортивному программированию

Сейчас проводится много разных олимпиад по информатике и программированию. В России самую долгую историю имеют олимпиады по правилам ACM ICPC, а также довольно похожие на них олимпиады школьников. В целом они по подготовке очень похожи (хотя немного отличаются тактиками).

Мы будем говорить про ACM ICPC, т.к. для таких олимпиад есть множество готовых рецептов. Прежде всего, нужно научиться решать задачи. Как ни странно, чтобы научиться решать задачи, нужно решать задачи ? Поэтому самый верный путь для новичка такой: открываешь любой архив задач и решаешь по возрастанию сложности. Если вдруг какая-то задача уж очень долго не поддаётся, пропускаешь её и решаешь следующую. Если слишком много задач пропущены, то стоит посоветоваться с более опытным олимпиадником, нет ли там какого-то сакрального знания. Прорешивание архива задач — это самый важный на старте процесс. Например, можно использовать acm.timus.ru. А далее постепенно добавлять другие элементы: чтение книг и сайтов по алгоритмам (например, e-maxx.ru), участие в онлайн соревнованиях (codeforces.ru, opencup.ru).

Рейтинг полезности ответа:
Артём Зюрюкин
генеральный директор Zartis Russia

Можно поучаствовать в семинарах при университете, проводящем олимпиаду, а также найти тех, кто уже участвовал. Если вы планируете принять участие в международной олимпиаде (например, крупнейшей в мире ACM/ICPC), то найти тестовые задания и материалы для подготовки можно и на сайте самой олимпиады. Кроме того, полезным будет обсудить сложности с участниками сообществ выбранных олимпиад в социальных сетях.

Рейтинг полезности ответа:
Андрей Зырянов
руководитель научно-исследовательской лаборатории Parallels Lab в МФТИ

Олимпиады бывают разные. Отсюда и требования разные. Если «классические», как ACM ICPC, то вам нужно начать решать задачи на acm.mipt.ru и judge.mipt.ru. Если по информационной безопасности (Capture The Flag) — изучать архитектуру ЭВМ, криптографию и сетевые протоколы. По разработке ПО (DevCup, ImagineCup, «Старт в науку») — изучать ООП и работать в команде над небольшими проектами. Залог эффективности — трудолюбие. Этим нужно заниматься, причем постоянно. Если нет прогресса в самостоятельном изучении, потребуется помощь преподавателей.

Рейтинг полезности ответа:
Роман Юферев
руководитель направления ИТ-менеджмента и мониторинга в компании VIAcode

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

Рейтинг полезности ответа:
Сергей Масягин
проректор по работе со студентами и абитуриентами Университета Иннополис

Для ответа на этот вопрос мы опросили чемпионов мира по программированию Николая Калинина, Геннадия Короткевича, Нияза Нигматуллина, Андрея Станкевича и Павла Маврина, которые сейчас тренируют новое поколение. Все они сходятся во мнении, что главное в этом вопросе — много практики. Обратите внимание на codeforces.ru, topcoder.com — периодически там бывают контесты, после которых на сайтах появляются разборы к ним. Также рекомендую к прочтению Programming Challenges, Miguel Skiena. Есть множество ресурсов, где можно найти теорию, таких как e-maxx.ru, habrahabr.ru.

Рейтинг полезности ответа:
Антон Пискунов
основатель и генеральный директор BeastGaming

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

Рейтинг полезности ответа:
Сергей Зефиров
программист с широким опытом работы, энтузиаст и евангелист языка Haskell

Не готовиться к олимпиадам по программированию. Совсем.

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

Готовясь к олимпиадам, вы наработаете себе стиль и подход к программированию, который придётся довольно долго исправлять.

Рейтинг полезности ответа:
Всеволод Шмыров
разработчик в команде API Яндекс.Карт

Для успешного развития нужно постоянно решать различные практические задания. Придумывать мелкие проекты и реализовывать их.

Рейтинг полезности ответа:
Олег Горшков
руководитель отдела системной интеграции ecommerce-студии Simtech Development

Здесь нет волшебных способов или специальных фокусов. Чтобы показать отличный результат на олимпиаде, прежде всего, нужно знать дисциплину. То есть тот язык, на котором вы программируете. Поставьте цель и упорно к ней идите. Набивайте руку на программировании и более глубоком изучении языка. Очень хорошо помогает прорешивание задач, которые были в прошлые годы и на других олимпиадах. Усложняйте их, придумавайте подобные и реализовывайте.

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

Добавить комментарий

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