2012年以来、私たちはCodeforcesとともにプログラミングの全ロシア選手権を開催しています。 18歳から参加できます。 全体としての市民権は重要ではありません。私たちは常にカザフスタン、ウクライナ、ベラルーシ、その他の国からのゲストを迎えましたが、トーナメントの言語はロシア語です。 たとえば、2013年には3,500人が参加し、「ターミネーター」の観光客が1位になり、5番目は日本から来たこの男rng_58です。
ルールは、解決する必要がある「オリンピック」タスクに加えて、独自の非標準データセットを選択することによる他の人々のソリューションの「ハッキング」です。 個人の分類、1位は10万ルーブル、2位と3位は7万ルーブル、5万ルーブル。 いつものように、決勝戦には別のゲームラウンドがあります-他の参加者のAIと戦うにはAIを書く必要があります(昨年はその前にホッケーがありました-魔術師の戦い)。 ゲームラウンドの賞品はラップトップです。
タイミング
3月16日の予選、3月18日の予選、50人の参加者の決勝-4月15日、モスクワのオフィスで。 昨年、決勝に選ばれた参加者の数の段階は次のとおりでした:決勝では3500、2000、400、50。 ファイナリストの平均年齢は24歳です。
ロシア連邦からのファイナリストには、モスクワへのチケット(最大1万ルーブル)の補償が提供されます。
難易度
ファイナルに近づくにつれて難易度は上がりますが、ラウンドのルールは変わりません。
トーナメントの進捗
予選は、通常すべてのトーナメントが開催されるように、Codeforcesプラットフォームでリモートで開催されます。 最後は物理的な参加です。すべてのプレイヤーが1つの部屋に集まります。 Wi-Fi、ソケット、ローカルマシンがあり、ルールで規定されているすべての言語をカバーする一連の開発環境を備えています。 実際には、このようなマシンを数台しか配備していないことが示されています。通常、参加者はラップトップを持って到着します。
そこから(通常どおり)アカウントの下のサイトにアクセスし、タスクを取得して解決します。 タスクを閉じると(それ以降は作業できなくなります)、送信済みのソリューションのソースコードを確認し、実際には、自動テストのバグを特定することにより、つまり、入力データの複雑なセットを置き換えることにより、それらを「破る」ことができます。 ハッキングに成功した場合-ボーナス、失敗した場合-罰金。
2013年のタスクの例:
メモリのnセクションが与えられます。各セクションのバイト単位の長さa [i]は既知です。 メモリ内の可能なmからできるだけ多くのデータ構造を配置する必要があります。各構造について、バイト単位のサイズb [j]がわかっています。 つまり、楽観的なケースでは、m個の構造をすべて配置でき、悲観的なケースでは1つではありません。 すべてのb [j]は2のべき乗であることが知られています。 各構造は1つのメモリ内にある必要がありますが、この部分は複数の構造に対応できます。 もちろん、各バイトは複数の構造に属することはできません。
プログラムは、nおよびmが10 ^ 6を超えない場合、数秒以内にすばやく動作するはずです。 すべてのa [i]およびb [j]は1〜10 ^ 9の整数です。 値a [i]とb [j]の中には、同じ値(少なくともすべて)があります。
ここには他のタスクがあります。
ソリューションオプション:
まず、b [j]の値に単位がない場合の特別なケースを考えます。 したがって、b [j]の値はすべて偶数です(これらは2のべき乗であるため)。 この場合、メモリの奇数セクションを完全に使い切ることはできません(偶数セクションの合計は偶数です)。 したがって、各奇数a [i]から1を減算しても、何も失われません。 したがって、b [j]とa [i]がすべて偶数である状況が得られます。 ただし、これらの値はすべて2で同時に除算することができ、これにより答えは変わりません! このような分割により、単一の構造が表示される場合があります。次に、このケースを検討します(表示されなかった場合は、すべてを再び2つに分割できます)。
いくつかのb [j]が1に等しい場合、それらをどこかに配置しようとしない理由はありません。 もちろん、最初に、それらは奇数長のメモリのすべてのセクションで決定されなければなりません(結局、ユニット構造なしでは完全に使用することはできません)。 このユニット構造が残った後でも、偶数セクションで1つのユニット構造を定義すると、奇数になることに注意してください。 したがって、別のユニット構造を決定することは確かに有益です。 したがって、ユニット構造のペアからサイズ2の構造を収集し、それらを全体として考慮して作業を続けることができます。 ペアなしで放置されている場合は、最小の正のa [i]で定義する必要があります。
そのため、サイズ1の構造がないことになり、最初のケースに到達したことになります。 覚えておく必要があるのは、現在の構造が何個の初期構造で構成されているか、そしてこのパラメーターに単一の構造を熱心に配置することだけです。
質疑応答
-トピックの公開時に何人が登録しましたか?
ここで見ることができます: codeforces.com/croc2016/registrants
-正確なルールと登録はどこにありますか?
ここにあります-codeforces.com/blog/entry/43229
ここでチャンピオンシップに登録できます -codeforces.com/croc2016/register
-タスクは20個のうち19個のデータセットを完了しました。少なくとも1つのポイントを獲得できますか?
いいえ、わかりません。 私たちはすべてを通過しなければなりません。
-私はロシア市民ではありません。 参加できますか?
はい しかし、モスクワへの道は、ロシア連邦の市民であるファイナリストにのみ支払うことを検討する価値があります。
-私は45歳で、ひげを生やした学生で、アフリカに住んでいます。 できますか?
参加し、決勝に進みます-はい。
-レポートはありますか?
写真レポートと参加者レポート 。
そしてビデオ:
-私が18歳でない場合、少なくとも予選および予選ラウンドに参加する機会はありますか?
はい、CFレーティングのために戦うことはできますが、ファイナルには到達しません。 少なくとも2016年4月15日まで18歳未満の場合。
-[大学]フィールドに入力できない場合、登録フォームに何を書く必要がありますか?
状況に応じて「null」と入力するか、単に入力してください。 制限はありません。
-かっこいいけど、できません。 次の選手権はいつですか?
競争に参加しないようにしてください。 うまくいかない場合-チャンピオンシップは最後ではなく、さらに多くのコンテストとコンテストがあります。 たとえば、数年前、私たちは飛行ロボットと100万ルーブルの賞品を競い合いました。 また、Habréで企業ブログをフォローすることもできます。主要なイベントが発表されます。