Пожалуйста, подпишитесь на официальный канал Codeforces в Telegram по ссылке https://t.me/codeforces_official. ×

Блог пользователя PICK43R

Автор PICK43R, 11 лет назад, По-русски

Уважаемые форумчане! Не буду долго разглагольствовать, сразу к делу. Я начал изучать программирование буквально недавно — мне это дело, скажу честно, нравится и мне бы очень хотелось развиваться дальше, но есть проблема. На сием сайте codeforces я могу решать максимум задачи уровня A и B (и то не всегда) из div2. Хотелось бы узнать — куда двигаться дальше? Какую литературу следует почитать?Вероятно, большинство с этого начинало свой путь программиста. В общем, если ли какие-нибудь "методики" обучения? Пожалуйста, откликнитесь, а то нахожусь на распутье.

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

По некоторым темам может помочь Google, и ты можешь такие задачи решать. А вообще нужна практика и голова на плечах, чтобы решать С и выше.

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

»
11 лет назад, # |
Rev. 7   Проголосовать: нравится +19 Проголосовать: не нравится
  1. Прорешивайте задачи с (http://www.acmp.ru/) в порядке возрастания сложности. Слишком простые можно пропускать, но до 40% встречаются задачи и на технику программирования, и с подводными камнями, поэтому для начинающего — самое то.
  2. Отличный сборник задач с подробными разборами и описаниями идей: Ф. Меньшиков "Олимпиадные задачи по программированию" (http://e-maxx.ru/bookz/). Сдавать можно тут: (http://informatics.mccme.ru/moodle/course/view.php?id=15).
  3. Советую сначала хорошо изучить свой язык программирования, на задачах же можно отточить мастерство. На этом сайте полезно бывает читать код других участников, чтобы заимствовать оформление и какие-нибудь конструкции, поэтому почаще читайте чужие коды, даже если сами решили задачу.
  4. Кормен ("Алгоритмы, построение и анализ") для начала, по-моему, сложновато, но всё же стоит полистать.
  5. На сайте(http://informatics.mccme.ru/moodle/) можно решать задачи по темам, параллельно изучая теорию — шикарный вариант. Почти вся необходимая теория лежит на (http://e-maxx.ru/algo/). Остальное можно гуглить: сначала читают хабр, на крайняк википедию)
  6. Кроме как решать всё, что видите, способа прокачаться нет :(
  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо за ответы! Часто в архивах есть чекеры и тесты. Очень хочется узнать, как ими пользоваться. Я к примеру пробовал через contester, но не выходит загрузить свои скачанные задачи. Такая же трабла и с Executor'ом :( Извините, если слишком назойлив, но на мои вопросы ответить, увы, некому. Друзья этим не занимаются:)

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        я уже качал, но не знаю, как этой штукой пользоваться

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится

          Пусть для начала ответ в задаче однозначный.
          Распаковываешь, в ту же папку кидаешь тесты и файл с твоим решением (например solution.exe). Потом открываешь !test.ini, подгоняешь понятно какие параметры и кликаешь на !test.exe.
          Вообще в readme.txt всё написано.

          • »
            »
            »
            »
            »
            »
            11 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            спасибо, я вроде разобрался, но после того, как я закинул папку с тестами из скачанного архива и файл a.exe туда, то после запуска !test.exe у меня пишет, что прошли все тесты (на всех "ok"), хотя я просто так туда кинул файл a.exe, в котором никакого решения по сути не было (я лишь для пробы его тулда кинул, а в нем решения задачи совсем не было). Странно, откуда все AC?

            • »
              »
              »
              »
              »
              »
              »
              11 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              наверняка включена генерация тестов

»
11 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Парень ниже советует Кормена "Алгоритмы. Построение и анализ". Я тоже новичок, скажем, легко решаю задачи А и В. Иногда и С получается, но как правило, после А и В идут уже задачи на знание алгоритмов различных, комбинаторику. То есть, чтобы решать С и выше, нужно уже из теории довольно много знать. Я сам в 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 в контестах, решай задачи. УСПЕХОВ ТЕБЕ!

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    В Кормене в конце есть описание основных моментов математики, которые нужны для понимания. Там всё достаточно доступно.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

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

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится

        Да забейте вы. Я до сих пор Кормена не читал)

        Точнее, начал читать, прочел десяток страниц, не понравилось. Потом перелистал на случайное место, начал читать оттуда, прочел еще десяток страниц, тоже не понравилось. И отложил я это до лучших времен.

        Хотя книга у меня есть. Когда-то нагрузил кучу различной литературы с мыслью "надо будет все это освоить", и так вся эта литература до сих пор ждет своего времени)

        Когда-то, может быть, дорасту и мне станет это интересно... Но не сейчас.

        Так что если вам не нравится Кормен — просто решайте задачи. И не пытайтесь читать только по той причине, что "так надо".

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
            Проголосовать: нравится +3 Проголосовать: не нравится

          Опишите тогда свой секрет успеха) Помимо решения всего, что движется и не движется)

          • »
            »
            »
            »
            »
            »
            11 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится

            Если я скажу, что надо пить козье молоко, мне кто-то поверит?)

            До успеха мне еще пахать и пахать) Едва-едва красный (подозреваю, что до следующего rated event), еще даже не красный на ТС, без особых навыков командных соревнований... Как по мне, это еще далеко не успех.

            На самом деле, метод "решать все что движется и не движется" — вроде бы работает. По крайней мере, по моим субъективным ощущениям и по динамике результатов — в моем случае он работает лучше, чем все предыдущие, к которым меня приучали различные знатоки, помощники, тренеры и доброжелатели. Хотя нормально заниматься именно с таким подходом, который мне сейчас кажется правильным, я начал месяца 3 назад (можете посмотреть хотя бы на то, что из всех моих сабмитов за почти 3 года от момента регистрации здесь — больше трети были в пределах последних 3 месяцев, от начала февраля этого года; я так же решаю задачи и на других сайтах, подозреваю, что там в сумме за 3 месяца будет даже больше, чем на codeforces), но пока что это работает.

            Сейчас я все больше убеждаюсь, что нету необходимости тратить время впустую, на такие вещи, как добивание задач, доказывание решений и т.д. Возможно, это правильно только в моем случае — но в моем случае это правильно. В прошлом году я мог убивать на АСМ даже больше времени, чем сейчас (хотя в большинстве случаев — все же меньше), при этом в итоге добиваясь даже меньшей пользы — за счет убойно низкого КПД подготовки.

            • »
              »
              »
              »
              »
              »
              »
              11 лет назад, # ^ |
                Проголосовать: нравится +4 Проголосовать: не нравится

              Стоит упомянуть о том какая у тебя математическая подготовка. Это очень важный критерий и без него картина того как ты тренируешься неполная. Ведь сейчас Avitella прочитает твое сообщение подумает "ну доказывать ничего не надо" и будет тренироваться неправильно, в то время как ты это не доказываешь например потому, что это тебе очевидно.

              • »
                »
                »
                »
                »
                »
                »
                »
                11 лет назад, # ^ |
                Rev. 4   Проголосовать: нравится +3 Проголосовать: не нравится

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

                Но на фоне моих знакомых математиков, которые в тех же мат.олимпиадах достигли уровня республиканской или международной олимпиады среди школьников, и сейчас продолжают принимать участия в соревнованиях уже среди студентов — мне стыдно за мою мат.подготовку:( Потому что ее, как таковой, нету. В школе я дальше областной олимпиады никогда не проходил. Да и на областной получал разве что какие-то утешительные призы)

                Кстати, в моем случае "очевидно" бывает как раз не очень часто. Обычно там в лучшем случае "_это выглядит правдоподобно_", а в худшем вообще "_ничего другого с входными данными при таких ограничениях я за 1 секунду делать не умею, а другие ведь сдают_". Из последних примеров — на одной из тренировок на прошлой неделе я угадал Теорему Кёнига, о которой до этого в жизни не слышал. Кстати, я ее и сейчас не докажу... Зато уже знаю, о чем она. Вероятно, чем больше задач решать, тем больше вырабатывается какой-то навык угадывания "типичных приемов". Не знаю, что-то в этом духе) Последние полтора-два месяца я вообще часто сдаю решение задачи сравнительно быстро, но потом понятия не имею, почему оно работает. И если начинаю у кого-то спрашивать, то это выливается в "не смешно так троллить, я ее дольше тебя решал", а в случае обсуждений на codeforces — в жирную кучу минусов. Потому что многие не понимают, как можно засылать по задаче "какую-то ерунду, которая проходит примеры и выдерживает стресс брутом на малых ограничениях".

            • »
              »
              »
              »
              »
              »
              »
              11 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Что вы имеете ввиду под «добиванием»? И почему вы считаете это ненужным?

              • »
                »
                »
                »
                »
                »
                »
                »
                11 лет назад, # ^ |
                  Проголосовать: нравится +3 Проголосовать: не нравится

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

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

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится

                  И что с такими задачами делать? Забивать на них?

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +3 Проголосовать: не нравится

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

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

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
            Проголосовать: нравится +6 Проголосовать: не нравится

          Основное предназначение Кормена это не читать подряд с первой страницы до последней (хотя так тоже можно). В Кормене можно читать отдельные главы. Например попалась задача на БПФ открыл главу прочитал, порисовал, задачки порешал. Там большинство глав практически независимы (нужно лишь знать что такое O-обозначение).