Недавно я открыл для себя сферу конкурентного программирования. Моим первым предприятием был набор задач TopCoder. Всего было три проблемы: хотя первые две были относительно простыми, последняя была огромной скалой. был таким элегантным и изящным, что я влюбился в него. В этом посте я делюсь с вами своими впечатлениями и выводами.
1. Традиционный способ - ручка и бумага
Проработка логики с помощью бумаги / ручки помогает мне разобраться в коде для угловых случаев, упомянутых в тестовом примере. Таким образом, время, которое вы тратите на повторение логических ошибок, намного меньше.
2. О, могучий компилятор!
После разработки алгоритма и передачи его в редактор вы можете столкнуться с серьезными проблемами, о которых, возможно, даже не задумывались, но вы должны поблагодарить компилятор за то, что он присутствует в вашей жизни.
3. Я надеюсь, что практика делает мужчину совершенным.
Нелегко решить задачу в ограниченное время, но в конце концов я всегда испытываю радость от решения проблемы. Невозможно справиться с задачей соревновательного программирования, если у вас нет много-много практики.
4. В конце концов, вы будете уверенно решать проблемы.
Самая важная мысль, которую я осознал во время соревновательного программирования: если мы разделим кажущуюся сложной проблему на более простые подзадачи, мы сможем найти ее решение. Когда я начинал программировать, у меня всегда был этот страх во мне, я не знал как подойти к проблеме, с чего начать возиться, это всегда было ошеломляющим. Постепенно я развил интуицию, чтобы атаковать проблемы. Теперь я могу решать большинство проблем; Сейчас сложнее всего заставить его работать с оптимальной сложностью, но я не жалуюсь.
5. Настойчивость - ключ к успеху
Чтобы не сдаваться, вам понадобятся драйв и стойкость. Каждый раз, когда вы отправляете решение и получаете сообщение об ошибке «Неверный ответ» или «Тайм-аут», это будет неприятно. пока вы не поймете это правильно.
6. Надо сохранить добрую память, друг мой!
Программист на C / C ++ с плохой памятью действительно имеет шансы против него. Вы либо знаете, как выполнять все манипуляции со строками, либо нет: если вы этого не сделаете или просто забыли (потому что вы не использовали его в течение долгого времени), выяснение того, как делать эти простые вещи, во многом узурпирует Давайте даже не будем начинать с вопроса BigIntegers, Python заставляет его выглядеть глупо с его целочисленным типом BigNum, а C ++ делает их экзотическими;)
7. Есть и тривиальные побочные эффекты!
Разобравшись во всем, даже если код работает, вы не сможете применить эти навыки программирования в своей работе. Насколько вам известно, atoi или sprintf могут быть большим запретом для производственного кода.
Вот руководство для начинающих для всех, кто заинтригован попробовать CP:
И курс Стэнфорда по соревнованиям по программированию:
Пожалуйста, поделитесь своими мыслями о соревновательном программировании в разделе комментариев.
Какие выводы? Что вдохновляет вас участвовать в задачах кодирования? Что вы чувствуете после решения проблемы?
Какая у вас история?