Этот блог — серия для CP, вы читаете часть1, часть2, часть3.

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

Как начать заниматься этим видом спорта?

Как стать мастером постепенно?

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

Для начала существуют различные популярные платформы CP, такие как hackerrank, hackerearth, Codechef, Codeforces, Leetcode, Topcoder с возрастающей сложностью задач.

Моя любимая платформа среди них — codechef, но если вы только начинаете CP, вероятно, hackerrank и hackerearth лучше всего подходят для практики и обучения. Я познакомился с CP на втором курсе инженерного дела! Самое главное, чтобы стать лучше в КП, — это практиковаться и никогда не отказываться от природы. Поначалу будет очень сложно, но поверьте мне, зеленый цвет (AC) доставляет огромное удовольствие :)

Codechef проводит три основных конкурса в рамках месячного задания: Cook-off и Lunchtime. Длинный вызов состоит из восьми задач, сложность которых увеличивается после каждого вопроса, и у вас есть десять дней, чтобы решить их. Длинный вызов — отличный источник для изучения новых концепций, и если вы искренне их даете, вы обязательно узнаете по крайней мере одну новую вещь. Cook-off — соревнование продолжительностью два с половиной часа, состоящее из 5 задач. Lunchtime — еще один короткий конкурс codechef, он тоже состоит из 5 задач, на решение которых у вас есть три часа.

Codechef проводит 3 основных конкурса в месяц: длинный вызов (10 дней), Cookoff и обеденный перерыв. Вы можете многому научиться во время продолжительного испытания, поэтому новичок может сразу перейти к длительному испытанию codechef. Я бы сказал, что схема Hackerearth - самая сложная вещь (по крайней мере, для меня), которая также является сложной задачей, но очень сложными вопросами, но все же рекомендуется для кодеров среднего и выше уровня.

Теперь давайте перейдем к некоторым техническим вещам. Во-первых, это язык, я предпочитаю CPP, потому что использую его! но недавние кодеры в основном используют python (легкий и короткий для написания, нет необходимости объявлять типы данных переменных!). С другой стороны, для запуска требуется гораздо больше времени, но это нас в основном не волнует во время CP. Настоящая конкуренция между JAVA и CPP. Я начал программировать на JAVA, но закончил кодированием на CPP, так как это эффективно, хотя конкурс короткий, а скорость обязательна! Без сомнения, в них обоих есть много различий, но я хочу выделить некоторые из них, которые относятся к CP. CPP имеет указатели, а JAVA — нет. Но все же я использую JAVA (только для проблем с использованием BigInteger)! и лучшая вещь о CPP — это #define. Я чаще всего использую его в своем шаблоне кода, чтобы писать короче. Например,

Итак, выберите свой язык соответствующим образом, но если вы не знаете ни одного из них и только начинаете, я рекомендую Python (в конце концов, за Python будущее!)

Во-вторых, сложность времени и пространства. Я начал программировать на втором курсе, но не знал, как анализировать код и считать сложности! Этому я научился на третьем курсе (не повторяйте ту же ошибку!). DAA (Проектирование и анализ алгоритма) является обязательным. В основном вам нужно выдавать результат от 1 до 5 секунд (согласно ограничениям проблемы).

Очевидно, что от машины зависит, сколько циклов можно выполнить за 1 секунду. Но обычно 1000000 (10e6) циклов могут выполняться за 1 секунду. Таким образом, если задано 0≤N≤10e6, O(N) подходит для 1 секунды, а если 0≤N≤10, O(N!) и O(2^N) тоже хорошо. Если вы не знаете, что такое O(N),

for(int i=0;i‹n;i++) запускается N раз, так что это O(N) (Чтобы узнать все это с самого начала, откройте geeksforgeeks время и сложность пространства

Теперь позвольте мне принять вердикты, которые вы можете получить,

AC(Принято) или правильный ответ (удовлетворительно)

Неправильный ответ (WA) (наиболее ненавистный)

Превышение лимита времени (TLE) (Вот это да!!)

Ошибка выполнения (возможны различные RE) (Что за ошибка!!)

Ошибка компиляции (не должно получаться)

Превышение лимита памяти (редко)

Неправильный ответ означает, что вывод вашего кода не соответствует правильному выводу для этого ввода (или не соответствует условиям, если возможны несколько решений). Это наиболее часто встречающаяся ошибка, с которой вы столкнетесь, и избавиться от нее может быть непросто. Больнее, когда это только из-за «\n».

Другой важной частью является отладка! После получения WA нет другого пути, кроме отладки вашего кода. Где провал! Пробный запуск всего кода дает случайный ввод, печатает значения флагов и сообщения. Найти угловые случаи (наиболее распространенная причина получения WA)

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

Редактировать: Ссылка на следующий блог!