オリンピアードの道

*付随する画像がああるはずですが、habraeffectは彼女のリポジトリを殺すました(*

前の投稿で約束したように、私は次の記事を投稿します。この記事では、さまざまなオリンピアードに参加する方法を説明し、最初のヒントを示します。

UPD:シリーズの次の投稿



どこへ行く

学ぶ方法

UFOのように突然あなたが最初の場所をとることを期待するのは愚かです。 成功の鍵は、継続的なトレーニングにあります。 週に約20〜30時間、またはそれ以上を費やす必要があります。 まず第一に、あなたは関連文献の世話をする必要があります: コーメンはあなたの年鑑になり、彼と共にクヌートになるべきです。 オンラインリソースから、 Algoliste-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年前のようです。



All Articles