Соревновательное программирование

Основная директива в «Конкурентном программировании» такова: «Принимая во внимание хорошо известные проблемы компьютерных наук (CS), решайте их как можно быстрее!».

Давайте переварим термины один за другим. Термин «хорошо известные проблемы CS» подразумевает, что в конкурентном программировании мы имеем дело с решенными проблемами CS, а не с исследовательскими проблемами (решения которых пока неизвестны). Некоторые люди (по крайней мере, автор задачи) определенно решали эти проблемы раньше. «Решить их» подразумевает, что мы должны довести наши знания CS до определенного необходимого уровня, чтобы мы могли создать рабочий код, который также может решить эти проблемы - по крайней мере, с точки зрения получения того же результата, что и автор задачи, используя секрет автора проблемы. данные тестирования в установленный срок. Необходимость решить проблему «как можно быстрее» - вот в чем заключается конкурентный элемент: скорость - очень естественная цель человеческого поведения.

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

Шаг 1:

Выберите язык программирования и изучите их основы, чтобы вы могли использовать этот язык для написания кода без ошибок. Итак, следующий всплывающий вопрос: «Какой язык учить?». В мире соревнований скорость и полезные удобные инструменты имеют большое значение, поэтому C ++ - лучший вариант, который у нас есть. C ++ работает очень быстро, а стандартная библиотека шаблонов C ++ предоставляет множество инструментов, помогающих писать быстрый и эффективный код. Хотя C быстрее, чем C ++, из-за отсутствия библиотеки STL предпочтительнее C ++.

Ресурсы:

Для C / C ++: - http://www.youtube.com/mycodeschool

Для практики: - https://www.hackerrank.com/domains/cpp

Шаг 2:

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

Ресурсы:

Для практики: - https://www.hackerearth.com/practice/codemonk

Для чтения: - https://ms.sapientia.ro/~kasa/Algorithms_3rd.pdf (Эти книги содержат все основные структуры данных и алгоритмы, если вы можете прочитать их полностью, это лучше, иначе вы также можете использовать это как ссылка)

Видео-лекции: - http://www.youtube.com/playlist?list=PL2_aWCzGMAwLZp6LMUKI3cc7pgGsasm2_

Шаг 3:

Самая важная часть для того, чтобы стать хорошим конкурентным кодером, вам нужно много практиковаться. Есть несколько веб-сайтов (которые известны как онлайн-судьи), которые предоставляют вам платформу для конкуренции с другими программистами со всего мира, такими как CodeChef, CodeForces и т. Д. Зарегистрируйтесь на этих платформах и начните тренироваться и соревноваться. Совет для этого шага состоит в том, что соревновательный требует времени и проверки уровня терпения, поэтому просто продолжайте делать это после того, как определенный уровень результат обязательно начнет приходить.

Другие полезные ресурсы:

Для любого контента, чтобы узнать об алгоритмах и структурах данных: - http://geeksforgeeks.org/

Для тематического содержания и практических задач: - https://discuss.codechef.com/t/data-structures-and-algorithms/6599

Для расширенных тем: - https://codeforces.com/blog/entry/57282