Уважаемые форумчане! Не буду долго разглагольствовать, сразу к делу. Я начал изучать программирование буквально недавно — мне это дело, скажу честно, нравится и мне бы очень хотелось развиваться дальше, но есть проблема. На сием сайте codeforces я могу решать максимум задачи уровня A и B (и то не всегда) из div2. Хотелось бы узнать — куда двигаться дальше? Какую литературу следует почитать?Вероятно, большинство с этого начинало свой путь программиста. В общем, если ли какие-нибудь "методики" обучения? Пожалуйста, откликнитесь, а то нахожусь на распутье.
По некоторым темам может помочь Google, и ты можешь такие задачи решать. А вообще нужна практика и голова на плечах, чтобы решать С и выше.
Я бы посоветовал на этом этапе просто решать какой-нибудь архив задач долгий промежуток времени. Например все лето.
Спасибо за ответы! Часто в архивах есть чекеры и тесты. Очень хочется узнать, как ими пользоваться. Я к примеру пробовал через contester, но не выходит загрузить свои скачанные задачи. Такая же трабла и с Executor'ом :( Извините, если слишком назойлив, но на мои вопросы ответить, увы, некому. Друзья этим не занимаются:)
http://acm.timus.ru/tester/
я уже качал, но не знаю, как этой штукой пользоваться
Пусть для начала ответ в задаче однозначный.
Распаковываешь, в ту же папку кидаешь тесты и файл с твоим решением (например
solution.exe
). Потом открываешь!test.ini
, подгоняешь понятно какие параметры и кликаешь на!test.exe
.Вообще в
readme.txt
всё написано.спасибо, я вроде разобрался, но после того, как я закинул папку с тестами из скачанного архива и файл a.exe туда, то после запуска !test.exe у меня пишет, что прошли все тесты (на всех "ok"), хотя я просто так туда кинул файл a.exe, в котором никакого решения по сути не было (я лишь для пробы его тулда кинул, а в нем решения задачи совсем не было). Странно, откуда все AC?
наверняка включена генерация тестов
Парень ниже советует Кормена "Алгоритмы. Построение и анализ". Я тоже новичок, скажем, легко решаю задачи А и В. Иногда и С получается, но как правило, после А и В идут уже задачи на знание алгоритмов различных, комбинаторику. То есть, чтобы решать С и выше, нужно уже из теории довольно много знать. Я сам в 8 классе учусь, читаю Кормена, но в анализе алгоритмов используется математика более высшего уровня(ряды, прогрессии, рекуррентные соотношения), то есть студентам по Кормену уже куда проще. Вот лично мой совет, скажу так, что я придерживаюсь этого пути. 1. Выучи какой-нибудь ЯП на уровне знания алгоритмов(for,while), массивов, написание структур(С, С++), ну и базовые вещи. Остальные структуры, типа векторов и подобное можно в инете найти. Если сам ЯП тяжко учится, советую Р. Лафоре "ООП в С++", со второй по седьмую главу. ОБЯЗАТЕЛЬНО ДЕЛАТЬ ВСЕ УПРАЖНЕНИЯ. Если потянешь, то начни со Страуструпа. Хотя в Лафоре ты прочувствуешь ООП и уже будешь иметь представление об этом. 2. Я начал читать кормена с 6 главы. Но есть крутые видеолекции, вот ссылка на первый семестр http://www.lektorium.tv/course/?id=22823, вот на второй http://www.lektorium.tv/course/?id=22843. Просматривай, записывай по ходу, переписывай псевдокоды на свой "родной" ЯП. 3. Вот тут тоже теория, если пролистнешь немножко вниз, то увидишь темы сортировки, ДП и прочее. Так же здесь большой архив задач http://informatics.mccme.ru/moodle/ 4. Участвуй на codeforces в контестах, решай задачи. УСПЕХОВ ТЕБЕ!
В Кормене в конце есть описание основных моментов математики, которые нужны для понимания. Там всё достаточно доступно.
На самом деле, мне на данный момент достаточно самих алгоритмов без анализа. Хотя уже часть из анализа я понимаю.
Да забейте вы. Я до сих пор Кормена не читал)
Точнее, начал читать, прочел десяток страниц, не понравилось. Потом перелистал на случайное место, начал читать оттуда, прочел еще десяток страниц, тоже не понравилось. И отложил я это до лучших времен.
Хотя книга у меня есть. Когда-то нагрузил кучу различной литературы с мыслью "надо будет все это освоить", и так вся эта литература до сих пор ждет своего времени)
Когда-то, может быть, дорасту и мне станет это интересно... Но не сейчас.
Так что если вам не нравится Кормен — просто решайте задачи. И не пытайтесь читать только по той причине, что "так надо".
Опишите тогда свой секрет успеха) Помимо решения всего, что движется и не движется)
Если я скажу, что надо пить козье молоко, мне кто-то поверит?)
До успеха мне еще пахать и пахать) Едва-едва красный (подозреваю, что до следующего rated event), еще даже не красный на ТС, без особых навыков командных соревнований... Как по мне, это еще далеко не успех.
На самом деле, метод "решать все что движется и не движется" — вроде бы работает. По крайней мере, по моим субъективным ощущениям и по динамике результатов — в моем случае он работает лучше, чем все предыдущие, к которым меня приучали различные знатоки, помощники, тренеры и доброжелатели. Хотя нормально заниматься именно с таким подходом, который мне сейчас кажется правильным, я начал месяца 3 назад (можете посмотреть хотя бы на то, что из всех моих сабмитов за почти 3 года от момента регистрации здесь — больше трети были в пределах последних 3 месяцев, от начала февраля этого года; я так же решаю задачи и на других сайтах, подозреваю, что там в сумме за 3 месяца будет даже больше, чем на codeforces), но пока что это работает.
Сейчас я все больше убеждаюсь, что нету необходимости тратить время впустую, на такие вещи, как добивание задач, доказывание решений и т.д. Возможно, это правильно только в моем случае — но в моем случае это правильно. В прошлом году я мог убивать на АСМ даже больше времени, чем сейчас (хотя в большинстве случаев — все же меньше), при этом в итоге добиваясь даже меньшей пользы — за счет убойно низкого КПД подготовки.
Стоит упомянуть о том какая у тебя математическая подготовка. Это очень важный критерий и без него картина того как ты тренируешься неполная. Ведь сейчас Avitella прочитает твое сообщение подумает "ну доказывать ничего не надо" и будет тренироваться неправильно, в то время как ты это не доказываешь например потому, что это тебе очевидно.
Если сравнивать мою математическую подготовку с математической подготовкой моей бабушки, то я, понятное дело, весьма крут.
Но на фоне моих знакомых математиков, которые в тех же мат.олимпиадах достигли уровня республиканской или международной олимпиады среди школьников, и сейчас продолжают принимать участия в соревнованиях уже среди студентов — мне стыдно за мою мат.подготовку:( Потому что ее, как таковой, нету. В школе я дальше областной олимпиады никогда не проходил. Да и на областной получал разве что какие-то утешительные призы)
Кстати, в моем случае "очевидно" бывает как раз не очень часто. Обычно там в лучшем случае "_это выглядит правдоподобно_", а в худшем вообще "_ничего другого с входными данными при таких ограничениях я за 1 секунду делать не умею, а другие ведь сдают_". Из последних примеров — на одной из тренировок на прошлой неделе я угадал Теорему Кёнига, о которой до этого в жизни не слышал. Кстати, я ее и сейчас не докажу... Зато уже знаю, о чем она. Вероятно, чем больше задач решать, тем больше вырабатывается какой-то навык угадывания "типичных приемов". Не знаю, что-то в этом духе) Последние полтора-два месяца я вообще часто сдаю решение задачи сравнительно быстро, но потом понятия не имею, почему оно работает. И если начинаю у кого-то спрашивать, то это выливается в "не смешно так троллить, я ее дольше тебя решал", а в случае обсуждений на codeforces — в жирную кучу минусов. Потому что многие не понимают, как можно засылать по задаче "какую-то ерунду, которая проходит примеры и выдерживает стресс брутом на малых ограничениях".
Что вы имеете ввиду под «добиванием»? И почему вы считаете это ненужным?
Взять задачи, не решенные на контесте/тренировке, и прилагать все усилия к тому, чтобы решить их самостоятельно в свободное время.
Я считаю это ненужным, потому что в моем случае польза от такого занятия была слишком маленькой в пересчете на единицу потраченного времени.
И что с такими задачами делать? Забивать на них?
Как бы парадоксально это не звучало, но мне кажется, что во многих случаях действительно лучше забивать.
Если это кажется слишком радикальным ходом — тогда просто всегда пропускать стадию "да ладно, у меня ведь нету планов на вечер, буду думать над задачей", и сразу переходить к авторскому решению/чужим решениям/разбору.
Основное предназначение Кормена это не читать подряд с первой страницы до последней (хотя так тоже можно). В Кормене можно читать отдельные главы. Например попалась задача на БПФ открыл главу прочитал, порисовал, задачки порешал. Там большинство глав практически независимы (нужно лишь знать что такое O-обозначение).