なぜ競技プログラミングなのか?
競技コーディングって何?
・これは基本的に、いくつかの問題が与えられ、プログラミングスキルを使って様々な制約の下で最適化された解を出す頭脳スポーツです。
・このスポーツは基本的に、あなたの論理的思考、分析的思考、パターン認識、プレッシャーの扱い、そして最も重要な、データ構造とアルゴリズムに関する知識を試します。
なぜ競技コーディングなの?
・意図的な練習ルーティンをそれに基づいて構築できます
・技術面接の準備になります
・難しい問題に取り組むことに慣れます
・自分のスキルを公に示す方法です
・頭の体操が保証されます
・基本に焦点を当てる方法です
・楽しいです
・素早いコーディングを練習する方法です
・本当に選んだ言語を深く学びます
・競技プログラミングは活発なコミュニティがあります
・小分けのプログラムは取り組みやすいです
コードを読むことは教育的です。
どうやって始めるか?
・決意 / 専念。
・使用する言語の選択。どれが:言語はC++またはJava、最後の選択はPythonであるべきです。
・言語を学びましょう
・時間と空間の複雑さの概念を理解しましょう。
・データ構造とアルゴリズムの基本を学びましょう
・練習するプラットフォームを選びましょう(SPOJ、Codechef、Codeforces、Topcoder、Project Eulerなど)
・高度なデータ構造とアルゴリズム
・練習して、定期的にやりましょう
絶対にやってはいけないこと?
・落ち込まないでください。
・自分で実装しないでください。
・最善を尽くすことなく解答を見ないでください。
・コンペティションで解けなかった問題を再度解決しようとしてください。
・コンテスト終了後に解答を見てください。
・他の人が問題にどうアプローチしているか話を聞いて学びましょう。
・簡単な問題に固執しないでください。
重要なトピック
・基本的な組合せ理論と数理
・ソートと検索アルゴリズム
・ハッシング
・数理理論
・貪欲法
・グラフ理論
・Disjoint Set Union(Union-find)
・最小全域木
・セグメントツリー
・動的プログラミング
・文字列アルゴリズム
・トライ、接尾辞木、接尾辞配列。
・ビット操作 - AND、OR、XOR、NOTゲートの性質。
・幾何学的およびネットワークフローアルゴリズム
トップコンペティション
・ACM国際大学対抗プログラミングコンテスト(ICPC)
・TopCoder
・Google Code Jam
・国際関数型プログラミング会議
・Microsoft Imagine Cup
・Hewlett Packard(HP)Codewars
・Facebook Hacker Cup
・CodeChef
・Google Summer of Code
・国際Obfuscated Cコードコンテスト
・国際問題解決コンテスト
・Google Hash Code
・Google Kick Start
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/codewithsom/why-competitive-programming--1hf2