ロシアコードカップ2014の2回目の予選ラウンドのタスクを分析します





RCC 2014の2回目の予選ラウンドは5月18日日曜日に開催され、ラウンドに参加するために登録された5451人、1500人以上が参加し、そのうち少なくとも1つの決定が886人の参加者によって送られました。 合計で、ラウンド中に4890件の決定が送信されました。



RCC 2013の優勝者の 1人であるコロトケビッチジェナディ(ツーリスト) は、2回目の予選ラウンドの参加者表の最初の行を自信を持って獲得し、5つの問題すべてを最短ペナルティタイムで解決しました。 ジェンナディは、ラウンド4のすべての参加者の中で、それぞれ4:22、9:40、16:25、および50:29分に問題A、B、C、およびEを解決した最初の人物でもありました。 最初の30時17分、タスクDはDmitry Sutygin(morojenoe)によって解決されました。 2回目の予選ラウンドの結果によると、200人の最高のスポーツプログラマーが予選ラウンドに参加し、11人が不正行為の審査員によって失格となりました。



最初の2つのラウンドで資格を持たない参加者は、モスクワ時間の5月24日19:00と6月1日13:00に開催される第3および第4の資格ラウンドに参加できます。



ロシアコードカップに参加するには、 サイトに登録する必要があります (登録は最終予選ラウンドが始まるまで開いています)。



タスクA チームオリンピアード

アイデア:Vitaly Aksenov。

実装:アンドレイ・コマロフ。

分析:ヴィタリー・アクセノフ。

このタスクで最も論理的なのは、Vasyaが解決した最初のタイプのタスクの数をすぐにソートすることです。 彼に最初のタイプのvn問題を解かせて、次に、Vasyaがオリンピアードで解決できる2番目のタイプvmの問題の最大数が(n-vn•p)/ qであることは明らかです。 合計で、最初のタイプのn-vn問題と2番目のタイプのm-vmがあります。 これらの数値をゼロと比較することを忘れてはなりません。

オリンピアードで解決できる最初と2番目のタイプのタスクの最大数を計算します。 最初のタイプはmaxn = t / pで、2番目のタイプはmaxm = t / qです。 計算値のおかげで、答えは簡単に計算できます:1 +(n-vn + maxn-1)/ maxn +(m-vm + maxm-1)/ maxm。



タスクB 3つのルーク

アイデア:ジョージコルネエフ。

実装:Demid Kucherenko。

分析:ヴィタリー・アクセノフ。

ルークは3 x 3の正方形にしか配置できないことに注意してください。他の配置はこのルークの転送になります。 2つの解決策があります。 1つ目は、3行3列のすべての可能な3つのルーク配置を単純に調べます。

2番目は、3つのルークの相互配置のさまざまなオプションをすべて調べます。

*(1、1)、(2、2)、(3、3)。 ビート3•n + 3•m-12セル。

*(1、1)、(1、2)、(2、3)。 ビート2•m + 3•n-9セル。

*(1、1)、(2、1)、(3、2)。 ビート3•m + 2•n-9セル。

*(1、1)、(1、2)、(2、1)。 ビート2•n + 2•m-7セル。

*(1、1)、(1、2)、(1、3)。 ビートm + 3•n-6セル。

*(1、1)、(2、1)、(3、1)。 ビートn + 3•m-6セル。

他のすべての場合、「IMPOSSIBLE」が出力されます。



タスクC キングとクイーン

アイデア:Vitaliy Demyaniuk。

実装:Pavel Krotkov。

分析:パベル・クロトコフ。

ボード上の領域の最大数は8であることに注意してください。 そのうちの1つのサイズを見つける方法を学び、ボードを数回ひっくり返して回転させることにより、他のすべてのサイズを見つけます。

クイーンを座標(x、y)のセルに立て、行と列にゼロから番号を付けます。クイーンが立っている垂直線の左側にあり、セルから左上に放射された斜めの光線の上にある領域のサイズを見つける方法を学習します。女王が立っています。 この光線がボードの上端に接する場合(x≥y)、答えは1からx-1までのすべての数値の合計になります。それ以外の場合、この量から、女王によって打たれるセルの数を引く必要があります。ボードの端ではない場合。 このようなセルの数は、1〜x-y -1のすべての数の合計に等しくなります。



タスクD

アイデア:アンナマロバ。

実装:Artyom Vasiliev。

分析:Vitaly Aksyonov。

2つの操作で1つの頂点から取得する必要があるツリーがある場合:エッジを切り取り、シートに2つの頂点を追加します。 この問題を解決するには、まず、次数が4以上の頂点があるかどうかを確認しましょう。頂点がある場合は、ツリーを取得できません。



それ以外の場合は、ツリーを構築できます。 これを行うために、次数2の頂点v 2と次数3のv3の数を計算します。次数2の頂点がある場合、その最初の頂点を選択するとき、(v 2-1)・​​2 +(v 3 + 1)でツリーを構築し、そうでなければアクションの数は( v 2 + 1)・2 + v 3.次の3つの内部頂点を取得するには、2番目のタイプの1つの操作を適用する必要があり、2次の内部頂点を取得するには2つの操作を適用する必要があるためです。



タスクE 旅行税

アイデア:Boris Minaev。

実装:Boris Minaev。

分析:ボリス・ミナエフ。

税収は常に均等であることに注意してください。都市のペアには、それらを結ぶパスに沿って運転する2人の住民がいるからです。

各道路について、通過するパスの数を計算します。 これを行うには、エッジを削除するときにツリーが分割される2つのコンポーネントの頂点の数を乗算する必要があります。 総収入を計算するには、すべての道路で、この道路で計算した金額の運賃の積を合計する必要があります。



すべての道路で運賃ができるだけ低い場合に大統領が受け取る収入を計算します。 必要なものからこの量を引きます。 負の数を取得した場合、満足できる一連の税金はありません。 負でない数を取得する場合、道路の総数は600を超えないことに注意してください。



ここで、バックパックの問題の修正を解決する必要があります。 それは動的計画法によって解決されます。 すべての道路を順番に検討します。 また、特定の道路接頭辞のみを使用して特定の金額を収集するいくつかの方法をサポートします。 次の道路をどのように処理するかについて、さらに詳しく検討しましょう。 この道路の通行料に対する税の増加により、c通貨単位が総利益に追加され、道路の運賃が0から最大の範囲にあるとします。 総収入を得る方法がいくつあるかを調べる方法は? 実際、この数は、2つの項を除き、総利益m-cを取得する方法の数と一致します。 これらの用語は、運賃を0に設定できるという事実に対応していますが、最大+ 1にすることはできません。つまり、動的プログラミングの各値は、すでに計算された3つの値を使用して計算できます。 したがって、次の道路はO(MAX)で処理できます。MAXは大統領が得たい利益です。



All Articles