Что такое соревновательное программирование (КП)?

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

Почему CP?

Есть много причин для использования CP:

  1. Это отличное упражнение для мозга.
  2. Помогает развить ваши навыки решения проблем.
  3. Вы привыкнете работать над сложными задачами.
  4. Прилив адреналина, который вы испытываете, когда ваш код принимают, просто потрясающий.
  5. Хороший опыт в CP увеличивает ваши шансы попасть в хорошие продуктовые компании, такие как Amazon, Microsoft, Google и т. Д., Которые ищут людей, которые сильны в структурах данных и алгоритмах. А чтобы добиться успеха в CP, нужно хорошо разбираться в структурах данных и алгоритмах.

С чего начать?

Вот несколько шагов, чтобы начать свое соревновательное путешествие по программированию:

1 Изучите язык программирования:

Некоторые наиболее часто используемые языки для соревновательного программирования: C ++, Java, Python. Хотя Python прост и легок в освоении, это относительно медленный язык. В некоторых конкурсах запрещен даже питон.

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

C ++ является самым быстрым среди Python и Java и сравним с C. C ++ предлагает вам очень мощную библиотеку STL (стандартную библиотеку шаблонов), которая упрощает многие вещи для конкурентоспособных программистов. (Например, предопределенные функции для сортировки, поиска; векторы, множества, карты, пары и т. Д.)

Лично я предпочитаю C ++ для соревновательного программирования.

Ресурсы для изучения C ++:

2 Начните тренироваться и примите участие в конкурсах:

Как новичок, начните с раздела Решение проблем на Hackerrank. Охватывайте такие темы, как реализация, строки, сортировка, поиск, жадность, обработка битов в порядке Easy-Medium-Hard. Попробуйте набрать в нем 6 звезд, и вы начнете чувствовать, что узнали много нового. Длина вашего кода уменьшится, и вы начнете писать более эффективный код.

Между тем, примите участие в конкурсах на таких сайтах, как Codechef и Codeforces, поскольку они являются отличным способом изучить некоторые новые концепции. Вначале язык задач может показаться вам трудным для понимания, но после некоторых соревнований вы к нему привыкнете.

Также не забывайте решать задачи, которые вам не удалось решить в конкурсе.

Ресурсы:

Каналы YouTube, на которые следует подписаться:

3 Изучите структуры данных и алгоритмы:

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

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

Важные структуры данных для соревновательного программирования:

  • Массивы
  • Струны
  • Стеки
  • Очереди
  • Связанные списки
  • Куча (приоритетная очередь)
  • Непересекающийся союз множеств
  • Графики
  • Деревья
  • Сегментные деревья
  • Дерево бинарных индексов (дерево Фен-Вика)

Важные алгоритмы соревновательного программирования:

Алгоритмы, необходимые для решения задач в конкурсе кодеров

4. Практика, практика и практика:

Практика - ключ к успеху в соревновательном программировании.

Существует множество платформ, на которых вы можете отрабатывать множество задач. Теперь, когда вы хорошо познакомитесь с DSA, начните участвовать в Short Contests.

Некоторые из самых популярных платформ:

Конкурсы, на которые стоит обратить внимание:

  • CodeChef Starters (для начинающих)
  • CodeChef Long Challenge
  • CodeChef CookOff
  • CodeChef Обеденный перерыв
  • Codeforces Div 3 (для новичков)
  • Конкурсы Codeforces (Div 2, образовательные раунды и глобальные раунды)
  • Конкурс для начинающих AtCoder
  • Регулярный конкурс AtCoder

Что можно и нельзя в соревновательном программировании

  1. Практикуясь на любой платформе, не изучайте решение / редакционную статью, не прилагая усилий. Изучение решения не принесет вам никакой пользы. Всегда старайтесь найти решение проблемы. Даже через час или два, если вы не можете найти подход к решению, посмотрите редакционные статьи / обсуждения и попытайтесь полностью понять Код, а затем реализовать его самостоятельно.
  2. После завершения конкурса всегда старайтесь решить проблемы, которые вы не смогли решить в ходе конкурса. Здесь начинается настоящее обучение. Посмотрите редакционные статьи и обсуждения.
  3. Не стесняйтесь посмотреть на решение других людей / друзей после конкурса. Может быть, подход вашего друга может быть лучше вашего.
  4. Прочтите блоги на Codeforces, написанные высококлассными кодерами. Вы наверняка многому у них научитесь.
  5. Не ограничивайтесь простыми проблемами. Выйдите из своей зоны комфорта и бросьте вызов самому себе. Начните решать проблемы, которые действительно вас подталкивают.
  6. Создайте компанию друзей, которым тоже нравится CP, и ведите с ними здоровую конкуренцию. Обсудите с ними свои сомнения (конечно, не во время конкурса).
  7. Не беспокойтесь о рейтингах на различных платформах кодирования. Скорее сосредоточьтесь на своем росте. Ваш рейтинг автоматически повысится, если вы сосредоточитесь на обучении.
  8. Не теряйте мотивацию и не расстраивайтесь, если вы не можете хорошо выступить в конкурсе или не можете решить проблему. Такое случается. Просто учитесь на своих ошибках и постарайтесь не повторять их снова.
  9. Конкурентное кодирование - это скорее практика. Чтобы стать в этом мастером, нужно время. Поэтому никогда не сдавайтесь (если только вам это не нравится) и никогда не сомневайтесь в себе.

Вы можете проанализировать свою работу с помощью этого замечательного сайта: StopStalk