Недавно я открыл для себя сферу конкурентного программирования. Моим первым предприятием был набор задач TopCoder. Всего было три проблемы: хотя первые две были относительно простыми, последняя была огромной скалой. был таким элегантным и изящным, что я влюбился в него. В этом посте я делюсь с вами своими впечатлениями и выводами.

1. Традиционный способ - ручка и бумага

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

2. О, могучий компилятор!

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

3. Я надеюсь, что практика делает мужчину совершенным.

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

4. В конце концов, вы будете уверенно решать проблемы.

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

5. Настойчивость - ключ к успеху

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

6. Надо сохранить добрую память, друг мой!

Программист на C / C ++ с плохой памятью действительно имеет шансы против него. Вы либо знаете, как выполнять все манипуляции со строками, либо нет: если вы этого не сделаете или просто забыли (потому что вы не использовали его в течение долгого времени), выяснение того, как делать эти простые вещи, во многом узурпирует Давайте даже не будем начинать с вопроса BigIntegers, Python заставляет его выглядеть глупо с его целочисленным типом BigNum, а C ++ делает их экзотическими;)

7. Есть и тривиальные побочные эффекты!

Разобравшись во всем, даже если код работает, вы не сможете применить эти навыки программирования в своей работе. Насколько вам известно, atoi или sprintf могут быть большим запретом для производственного кода.

Вот руководство для начинающих для всех, кто заинтригован попробовать CP:



И курс Стэнфорда по соревнованиям по программированию:



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

Какие выводы? Что вдохновляет вас участвовать в задачах кодирования? Что вы чувствуете после решения проблемы?

Какая у вас история?