Здравствуйте, я, Аман Кумар Гоял, и я 3-звездочный программист в CodeChef, и вы можете задаться вопросом, что 3-звездочный программист сказал бы о соревновательном программировании, поскольку для опытных программистов 3 звезды не имеют большого значения, но позвольте мне сказать вам, что я был год пробовал свои силы в cp, и вначале я не смог решить ни одной задачи длительного испытания, и я начал чувствовать себя неудачником, и я думал, что никогда не смогу выступить лучше, и потребовалось некоторое время, чтобы работать лучше, я даже изо всех сил старался достичь 2 звезд, поэтому у меня большой опыт в том, как начать соревновательное программирование, поскольку неудача учит вас больше, чем успех, и я думаю, что могу помочь тем, кто думает, что они проиграли или программирование - не их чашка чая.

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

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

Википедия говорит:

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

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

«Ответ…», «Факториал данного числа…» и т. Д. Вы должны предоставить только результат, также в заданном формате. Проблемы обычно связаны с математикой, структурами данных и алгоритмами, и эти концепции даже не применяются напрямую.

Зачем нужно соревновательное программирование?

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

Что касается вопроса в целом, люди делают это, потому что каждая крупная многонациональная корпорация или организация или компании нашей мечты, такие как Google, Facebook, Amazon, Microsoft, Adobe и т. Д., Задают в своих технических собеседованиях аналогичный вопрос, как и в соревнованиях по программированию, это один основной движущей силы для выполнения соревновательного программирования. Есть еще один, и для меня это основная причина, соревновательное программирование учит вас способ мышления, способ решения конкретной проблемы, оно развивает в вас способность логического мышления, а также это лучший способ улучшить ваши данные. концепции структур и алгоритмов, которые являются хлебом с маслом студента, изучающего информатику, и обязательными для проведения собеседований.

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

Предпосылки для соревновательного программирования

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

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

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

Откуда и как начать заниматься соревновательным программированием?

Теперь переходим к основному вопросу о том, как это запустить и на каких платформах это можно сделать. Есть много платформ, с которых вы можете начать, например Codechef, Codeforces, Hackerrank, HackerEarth, SPOJ.

Я бы посоветовал вам начать с длинной задачи Codechef, и вы также можете потренироваться в разделе, прежде чем принимать участие в реальном конкурсе, он научит вас, как вводить данные, работать с тестовыми примерами и выдавать выходные данные в желаемом формате, поскольку даже неиспользование пространства может приведет к неправильному выводу. Долгие испытания длятся 10 дней, что даст вам достаточно времени, чтобы подумать о конкретной проблеме, и после нескольких долгих испытаний вы начнете чувствовать себя уверенно и к тому же зависимым (что хорошо). Наряду с долгой задачей продолжайте практиковаться, также одна очень важная вещь после завершения конкурса выпускается передовая статья, которая содержит подробное объяснение и решение проблемы, здесь вы можете узнать и решить те проблемы, которые вы не можете решить во время конкурса здесь происходит настоящее обучение, вы узнаете новые методы и темы. Как я сказал вам ранее, вы со временем узнаете, это способ научиться расти, только когда вы учитесь и пытаетесь решить те проблемы, которые вы не можете решить во время конкурса, если вы найдете какие-то новые темы, прочтите это в Интернете, изучите затем попытайтесь решить проблемы, это лучший способ улучшить ваши концепции.

Если вы чувствуете себя достаточно уверенно, вы можете начать делать короткие концепции на Codechef и Codeforces, которые обычно занимают от 2 до 3 часов, длинные конкурсы учат думать, а короткие концепции учат вас думать быстрее, что имеет решающее значение в соревнованиях и собеседованиях, просто продолжайте следить за Изложенный выше метод обучения после конкурсов из редакционных статей, и вы будете становиться лучше день ото дня конкурс за конкурсом.

Ресурсы для отслеживания

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

Я лично начал с бесплатных ресурсов, но через некоторое время мне стало трудно самостоятельно освоить структуры данных и алгоритмы, так как это требует больших усилий и настойчивости, поэтому я прошел мастер-курс Coding Blocks C ++, который очень помогает мне освоить DSA, и он имеет главный вклад в то, что я смог достичь 3-звездочного рейтинга.

За бесплатными ресурсами вы можете следить:

  • Канал YouTube Coding Blocks - он содержит потрясающий контент о соревновательном программировании. Есть много отличных плейлистов, таких как плейлисты с проблемами codeforces и другие замечательные плейлисты, так что вы можете это проверить.
  • MyCodeSchool - это тоже хороший канал YouTube с хорошим плейлистом, но здесь нет большого разнообразия, но действительно полезно изучить основы.
  • HackerEarth Codemonk - это также отличный ресурс, в котором написаны исходный код руководств и проблемы.
  • CodeChef DSA - CodeChef проводит экзамен по DSA, и там, в разделе подготовки, вы можете найти большое количество тематических ресурсов, а темы разделены на три уровня.

Для платного ресурса:

  • Исходя из своего личного опыта, я могу гарантировать, что курс Coding Blocks C ++ является лучшим в своем классе, и вы сможете изучить и освоить концепции DSA. Курс действительно исчерпывающий, сложный, и все подробно описано. Затем вы также можете пройти курс Соревновательное программирование, специально предназначенный для cp, и здесь вы будете готовиться к cp продвинутого уровня и к международным соревнованиям, таким как CodeJam, KickStart, HackerCup, ICPC, и т. д.

Мастер DS и алгоритм с C ++

Мастер DS и алгоритм с Java

Конкурсное программирование

  • Вы также можете пройти специализацию по алгоритмам из Стэнфордского университета, которую преподает Тим ​​Рофгарден на Coursera, но это дороже и немного сложнее для понимания, если вы выдержите это, тогда это окажется отличным опытом обучения.

Книги:

  • Введение в алгоритмы Томаса Х. Кормена, Чарльза Э. Лейзерсона, Рональда Л. Ривеста и Клиффорда Стейна.
  • Алгоритмы, 4-е издание Роберта Седжвика и Кевина Уэйна.
  • Упрощение структур данных и алгоритмов: структура данных и алгоритмические головоломки Нарасимха Каруманчи.
  • Структуры данных с использованием C, Рема Тарежа.

Конкурсы

Есть несколько довольно престижных конкурсов, о которых мечтают многие (в том числе и я) выиграть, например:

  • Международное студенческое соревнование по программированию (ICPC) - одно из старейших соревнований и самых престижных соревнований по программированию в мире, которое все еще остается мечтой для индийских студентов, поскольку никто из Индии не может его выиграть, это для студентов университетов группы по 3 человека.
  • Международная олимпиада по информатике (IOI) - одно из старейших соревнований, предназначенное только для школьников.
  • CodeChef SnackDown - это ежегодный конкурс от Codechef, который проводится в качестве подготовительного конкурса к ICPC и имеет большой приз.
  • Facebook Hacker Cup - организуемый и спонсируемый FaceBook, этот конкурс проводится с 2011 года и имеет довольно хорошую репутацию.
  • Google Code Jam - организован и спонсируется «» Google, проводится с 2003 года и предназначен для всех: студентов, профессионалов и т. д.
  • Google Kickstart. Он организован для студентов университетов и является одним из самых простых способов получить звонок от Google на собеседование, если вы хорошо справляетесь, а также у него средний уровень проблем и если вы станете профессионалом. в соревновательном программировании вы можете хорошо выступить.

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