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

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

1. Подскажите, пожалуйста, с чего же все-таки именно начать?
2. Задачи на какие темы встречаются чаще всего?
3. Сколько времени для подготовки понадобится, чтобы хорошо выступить, а в идеале победить в олимпиаде?

  

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

  

*Спасибо большое всем кто ответил!* 

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

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

3. Потом пробуешь написать программу, которая решает конкретную задачу.  

  

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

  

Повторяешь шаги 1-3 раз 10 с разными задачами.  

  

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

 Насколько я понимаю в олимпиадах побеждают те, кого специально на них натаскивают преподаватели в специализированных классах. Но надо ли вам это? Просто участвуйте и получайте удовольствие от решения. Хотя лично для меня удовольствие решать задачи на скорость а не на качество - сомнительное занятие. 

> Подскажите, пожалуйста, с чего же все-таки именно начать?

1. Нужно научиться понимать текст и требования задачи.  

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

3. Научиться чётко и по шагам формулировать алгоритм/блок-схему решения (в голове или на бумаге) до начала написания кода в целях экономии времени на отладку кода и при поиске и устранении возможных ошибок.  

4. Научиться чётко и с первой попытки конвертировать алгоритм в код на выбранном языке программирования.  

  

**Вот, для разминки:** попробуйте начать с написания алгоритма для поиска решения полной сборки кубика-Рубика (все грани одного цвета) из любого начального состояния с наименьшим количеством задействованных (вращаемых) граней.