前の投稿で約束したように、私は次の記事を投稿します。この記事では、さまざまなオリンピアードに参加する方法を説明し、最初のヒントを示します。
UPD:シリーズの次の投稿 。
どこへ行く
ACM ICPC
一般的に言えば、大学がすでにあなたの後ろにある場合、またはあなたが何か大きな大学 ( サンクトペテルブルク州立大学ITMO、サンクトペテルブルク州立大学、サラトフ州立大学、キエフ州立大学、ウラル州立大学など)で勉強している場合- 真実ではないあなたのもの-MikeMirzayanovに感謝します )が、オリンピックに興味を持ったことは一度もないので、ほとんど確実にACM ICPCに行く方法はありません。 なんで? 答えは明らかです。もしあなたが学生でなくなったら、明らかに大学間競争に参加することはできません。 しかし、あなたがかなり前に姿を現した大学で勉強しているなら、あなたは良心のわずかな輝きなしで追い出されます。 そして、彼らがそうしなければ、初心者としてあなたはまだプロに反対する機会がありません。 ただし、これらのポイントのいずれにも該当しない場合、パスは開いています。 大学の適切な部門に行き、ACM ICPCへの参加申請を要求するだけです。 オリンピアードの各ステージに関する詳細な情報は、NEERCの公式ウェブサイトにあります。トップコーダー
そして、誰でも参加できます:制限なしと言えます! 「無料入場」に加えて、TopCoderは多用途です。多くの分野で競技が開催され、多くの場合、1位に入らなくても良い賞金を獲得できます。 目的地の完全なリストは、情報ページで入手できます 。その他の芸術
上記に加えて、 Google Code JamやUVaのような他の多くのコンテストがあります 。 ところで、誰も一度にすべてに参加することを気にしません。 好きなものに応じて、すべてではありません。
学ぶ方法
UFOのように突然あなたが最初の場所をとることを期待するのは愚かです。 成功の鍵は、継続的なトレーニングにあります。 週に約20〜30時間、またはそれ以上を費やす必要があります。 まず第一に、あなたは関連文献の世話をする必要があります: コーメンはあなたの年鑑になり、彼と共にクヌートになるべきです。 オンラインリソースから、 Algolist 、 e-maxx 、およびComputer Algorithm Tutorを宣伝できます。 最後のリソースは、アルゴリズムの多くのビジュアライザーが含まれているという点で特に注目に値します。 ただし、habraeffectに注意してください 。サイトはかなり古いPentium-IVで回転しています。もちろん、 ケースを詰め込む理論はほんの少し助けになるので、練習する必要もあります。 この問題で、ウラル州立大学の顕著な創造物であるティマスは、良いヘルパーになることがわかります。 そこで、非常に大きなデータベース(約700個)からタスクを選択し、それを解決できます。 評価は、ACM ICPCルールに従って行われます。 ティマスは非常に人気があり、国内のプログラマーだけでなく、合計でさまざまな国の4万人以上がランキングに参加しています。 また、前述のTopCoderには練習モードがあります。
何を書くべきか
オリンピアードの言語の選択は標準です:C / C ++、Java、Pascal。 一部のオリンピックでは、Delphi、C#、さらにはHaskellやOCamlなどの一部の機能言語によって拡張されています。 選択肢が広いので、なぜ自分の好きな言語で書けないのでしょうか? 理由は次のとおりです。コンテストで最も重要なパラメーターの1つは、ソリューションをどれだけ迅速に作成するかです。 ここで考えてみてください:間接的にツリーを実装する必要がある場合、どちらが良いですか:素朴なPascalまたはJava、すばらしいTreeSetがありますか? また、別のケースもあります。メモリ制限は非常に小さいです(ところで、ここにそのようなタスクの例を示します。すぐに解析する予定です)。 もちろん、C / C ++またはPascalを選択する方が簡単です。だから、 すべてを書く必要があることがわかりました 。 さらに、作業するすべての言語の標準ライブラリに精通している必要があります。 非常に多くの場合、問題を解決するときに、さまざまなデータ構造を使用したり、並べ替えたりすることが間接的に必要になります。 時間を無駄にしないために、既製のオプションを使用する方がはるかに論理的です。 特に、あなたがより効率的に書くことはまずないので。 ただし、これは常に正しいとは限りません。たとえば、Javaで
a.indexOf(b)
を使用しないでください
a.indexOf(b)
と
b
は文字列です。 なんで? はい、 O(n⋅m)を超えて非常に長い時間動作するためです。 したがって、2番目の結論: 特定の言語でこの小さなことをどの程度効率的に実装するかを非常によく知る必要があります。
あとがきと約束
これが、オリンピアードの世界への最初の別れの言葉です。 次の投稿では、さまざまな言語の長所と短所についてさらに詳しく話し、これにいくつかの古典的な問題の分析を加えます。 ところで、一部の労働者は、ACM-schikiがどのように生きているかについて話すよう求められます。 残りの労働者が承認すれば、私はこれを行うことができます。PS Olympiadプログラミングが従来のプログラミングにどのように適用できるか、または適用できないかのトピックは、約9000年前のようです。