Здравствуйте, читатели! Меня зовут Читра Сингла, я студентка последнего года обучения программному обеспечению Делийского технологического университета. Недавно я получил предложения на постоянную работу от Google и Amazon. Раньше я проходил двухмесячную летнюю стажировку в Amazon, а в настоящее время прохожу шестимесячную зимнюю стажировку в Walmart.

Конкурентное кодирование занимает особое место в моем сердце. В настоящее время я имею рейтинг эксперта на Codeforces и 4-звездного кодера на Codechef. Благодаря постоянной практике и последовательности мне удалось получить глобальный рейтинг 369 в Google Code Jam I/O Women 2020 и глобальный рейтинг 1114 в Google. Kickstart Round C 2020. Кроме того, я получил глобальные рейтинги 97, 462 в раундах CodeForces 713 и 642 (Div 3) и 140, 220 вотборочных раундах CodeChef в июле и феврале 2020 г. (Div 2) соответственно.

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

В этом блоге я буду отвечать на некоторые вопросы, связанные с CP, относительно которых люди часто сталкиваются с дилеммой. Чтобы было весело, он представлен в формате анкеты. Приятного чтения!

Оглавление:

[1] Что такое КП?

[2] Кто должен делать КП?

[3] Нужен ли CP для взлома мест размещения?

[4] С какой платформы следует начать?

[5] Когда лучше всего заняться CP?

[6] Каковы предварительные условия?

[7] Каков идеальный подход к решению вопросов?

[8] Важность конкурсов.

[9] Как поступить в ситуации, когда вы не в состоянии ответить на вопросы?

[10] Заключительный совет начинающим программистам

[1] Что такое CP?

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

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

Многие онлайн-платформы и компании проводят соревнования по программированию. например: Hashcode, Kickstart, CodeJam от Google и HackerCup от Facebook. Одним из самых известных соревнований по программированию является ICPC (International Collegiate Programming Contest). Программисты могут принять участие в этих конкурсах, проверить свое понимание, продемонстрировать свои навыки и получить шанс выиграть интересные подарки и призы в этих конкурсах.

[2] Кто должен делать CP?

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

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

[3] Необходим ли CP для взлома мест размещения?

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

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

-› Как запустить CP?

Теперь возникает вопрос, как начать соревновательное программирование. Начните с изучения основ языка программирования (это может быть любой из C++ или Java, эти 2 являются рекомендуемыми). Изучив основы, приступайте к решению задач. Для этого вы можете начать с HackerRank, так как это самая удобная платформа для начинающих, которая помогает легко развить основные навыки решения проблем.

Ознакомившись с основными задачами, вы можете начать практиковаться в вопросах на Codeforces. Это одна из лучших платформ для соревновательного программирования. Постепенно начинайте участвовать в конкурсах и каждые 3/4 часа решения задач выделяйте не менее 1 часа на изучение и повторение концепций.

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

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

[4] С какой платформы следует начинать?

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

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

Недавно Codeforces представила 2 новых раздела: Каталог и EDU. В разделе каталога представлены тематические блоги, связанные с CP, которые пишут лучшие программисты. А в разделе EDU присутствует курс, который содержит теоретические и практические задачи, связанные с некоторыми важными темами соревновательного программирования.

Помимо Codeforces, существует множество других платформ, таких как CodeChef, Topcoder, AtCoder и многие другие.

[5] Когда самое подходящее время, чтобы заняться CP?

Любой может начать в любое время, идеального времени не существует, потому что все зависит от мотивации. Некоторые люди тратят 3-4 года и все еще не могут улучшить свои показатели, в то время как некоторые люди достигают высоких уровней всего за 3-4 месяца, так что все зависит от человека. Моя рекомендация - начать как можно раньше.

[6] Каковы предварительные условия?

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

[7] Каков идеальный подход к решению вопросов?

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

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

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

  • Использование вызова по ссылке в случае векторов и строк вместо вызова по значению
  • Использование карты вместо unordered_map, поскольку временная сложность unordered_map в наихудшем случае является линейной.

Делайте короткие заметки, в которых вы объясняете que в 1–2 строках, а его подход — в 2–3 строках, чтобы не отнимать много времени на повторение.

[8] Важность конкурсов.

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

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

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

[9] Как быть в ситуации, когда вы не можете ответить на вопросы?

Будет много раз, когда вы не сможете решить вопрос. Для этого может быть 2 причины: одна может заключаться в том, что вопрос будет решаться алгоритмом или структурой данных, о которых вы не знаете, или это совершенно новый тип вопроса. Итак, в этом случае определите это и изучите, а затем попытайтесь решить вопрос. Второй случай может заключаться в том, что вы знакомы с темой вопроса, но все равно не можете придумать подход. В этом случае постарайтесь, если возможно, разделить вопрос на более мелкие задачи, а затем попытайтесь решить, получить подсказки и обсудить это со сверстниками. Если ничего из этого не работает, то посмотрите редакционную статью и попытайтесь проанализировать, почему вы не смогли до этого додуматься.

[10] Последний совет начинающим программистам

Участвуйте в как можно большем количестве конкурсов. Я часто вижу студентов, которые тратят месяцы на теорию КП и никогда не участвуют в соревнованиях (онлайн или на местах), опасаясь, что они не знают достаточно, чтобы начать соревноваться, или опасаясь давления состязаний на время. Написание точного и быстрого кода — огромная часть CP, и ее можно улучшить, только участвуя в живом соревновании. Кроме того, общайтесь с людьми, которым нравится CP. Окружение такими людьми будет поддерживать вашу мотивацию.

Поскольку вы добрались до конца 🤗, вот список ресурсов, которые я использовал в своем путешествии по CP.

-› Сайты для занятий

-› Книги, которые я использовал (Нажмите на ссылку, чтобы получить доступ к бесплатному PDF-файлу)

-> Другие источники

Это все с моей стороны! Если вы хотите обсудить какой-либо конкретный вопрос или у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне на моем LinkedIn :) Если это было вам полезно, нажмите кнопку аплодисментов и подпишитесь на Codess.Cafe, чтобы узнать больше таких статей.

Codess.Cafe: LinkedIn | Ютуб | Сайт | Средний | Твиттер