Как решать олимпиадные задачи по программированию?
Пытаюсь решать олимпиадные задачи по программированию и столкнулся с тем, что не понимаю как это правильно делать.
Обычно они делятся на два типа - первые, те, которые я прямо сразу знаю как решать. И тут все решение - просто начинаю писать код, отлаживать и т.д., никаких проблем.
А вторые - те, для которых или не знаю решения или даже условие сходу не понимаю. (уровень сложных на hackerrank или F,G на codeforces) Как решать такие "правильно"? Правильно - в смысле, чтобы улучшать не только скилл кодирования, но и какую-то теоретическую часть?
Имеет ли смысл сначала попытаться придумать решение самому или сразу гуглить теорию?
Если гуглить не сразу, то через какое время (сколько попыток решения)?
Берите задачник, строго по порядку. Думайте вечер. Тестируйте на informatics.mccme.ru Качайте книгу, там есть решения. Разбирайте. В итоге задача должна быть сделана (пройдены все тесты).
так с задачами проблем нет. вопрос именно по самому процессуу решения. брать одну задачу и думать над ней вечер, без использования интернета? если все еще не решилась, тогда что?
Ilias: я же все написал. думаете, пишите хоть что-то, прогоняете тесты (часть пройдет). а потом уже в книге решения смотрите и программируете так, чтобы все тесты прошли
Ilias: у тебя должен быть локальный учёт задач, которые ты проходишь. Ты туда переносишь информацию по каждой задаче. А потом если ты её не можешь решить, ты себе пишешь туда, что ты её не решил и почему ты её не решил и на какое время ты хочешь её вперёд перенести (на пять дней, например). А потом ты должен всегда видеть, какие задачи у тебя получились и какие у тебя не получились.
abcd0x00: то есть, я ее переношу вперед на несколько дней а за это время читаю теорию по ней? именно теорию, а не реализованные алгоритмы смотрю? а потом опять пробую решать?
Ilias: ты её переносишь на потом, чтобы потом с ней разобраться. Если ты её не перенесёшь, то она будет тормозить решение остальных задач, которые вполне решаются без проблем и добавляют опыт. Но ты её и не выкидываешь, потому что если ты её решить не можешь, значит не умеешь в её области, а если не умеешь, то надо учиться, иначе потом опять с этим столкнёшься, только уже не в учебных задачах, а в реальной.