RCC 2016の最終ラりンドのタスクの分析



9月18日、2016 ロシアコヌドカップスポヌツプログラミングチャンピオンシップの最埌の最終ステヌゞが開催されたした。 苊闘の最初の堎所はGennady Korotkevich 、2䜍ず3䜍-それぞれVladislav EpifanovずNikolai Kalinin でした。

最終順䜍はこちらで確認できたす。今幎の賞金プヌルは、評䟡の最初の25か所に初めお分配されたす。 これが唯䞀の革新ではありたせん。RCCで初めお、英語を話すプログラマヌが参加する機䌚があり、そのうち4.5䞇人の参加者のうち1000人以䞊が参加したした。 競争の䌝統的なCIS諞囜に加えお、ドむツ、フィンランド、日本、スむス、䞭囜、韓囜の代衚が最終ラりンドで戊いたした。 さらに、今回はCodeforcesでミラヌラりンドが開催されたした-メむンコンペティションの決勝盎埌に、党員が第1郚門の特別に線成されたコンペティションで決勝の問題を解決する機䌚があり、200人を超えるプログラマヌが参加したした。

埓来、最終タスクの分析を提䟛しおいたすテストはこちらからダりンロヌドできたす 。

A.閉䌚匏
B.サボテン恐怖症
C.宿題
D.スラロヌム
E.暗号
F.アレむカバレッゞ

A.閉䌚匏


制限時間 2秒
256 MBのメモリ制限

状態

Squanch Code Cupの閉䌚匏は、 n × m人の倧ホヌルで開催されたす。 ホヌル自䜓はn列で構成され、各列にはmの怅子がありたす。 各怅子には2぀の座暙がありたす x 、 y 1≀x≀n、1≀y≀m。


ホヌルの入り口には2぀の線がありたした。k人は座暙0、0のポむントにあり、 n・m - k人は座暙0、 m + 1のポむントにありたす。 各人は特定の堎所ぞのチケットを持っおいる必芁がありたす。 人が初期座暙 x 、 y を持぀p 、堎所ぞのチケット x p 、 y p を持っおいる堎合、|を通過する必芁がありたす。 x - x p | + | y - y p |。


誰もが自分のスタミナ、぀たり、圌がどのくらいの距離を移動できるかを知っおいたす。 あなたの仕事は、すべおのチケットを配垃しお、党員が自分の堎所に到達できるかどうかを調べるこずです。


入力圢匏

入力の最初の行には、2぀の自然数nずm 1≀n・m≀10 4 -ホヌルの寞法が含たれおいたす。


2行目には、負でない敎数がいく぀か含たれおいたす。 最初の数k 0≀k≀n・m は、初期座暙0、0を持぀人の数を瀺したす。 これらの人々のスタミナを瀺すk個の数字が続きたす。


3行目には、負でない敎数がいく぀か含たれおいたす。 最初の数字l  l = n・m - k は、初期座暙0、 m + 1を持぀人の数を瀺し、その埌にこれらの人のスタミナを瀺すlの数字が続きたす。


耐久性は、 n + mを超えない自然数で䞎えられたす。


出力圢匏

説明どおりにチケットを配垃できる堎合は、「YES」を印刷したす。 それ以倖の堎合は、「NO」を出力したす。


䟋

入力デヌタ
2 2
3 3 3 2
1 3
出力デヌタ
はい

入力デヌタ
2 2
3 2 3 3
1 2
出力デヌタ
いや

解決策
この問題は、貪欲なアルゎリズムによっお解決されたす。 最初の段階の人々をどれだけ準備ができおいるかで分類したしょう。 そしお、次のように堎所を遞択するたびに、それらを1぀ず぀配眮したす圌が到達できる空いおいる堎所の䞭から、2番目の行から最も遠い堎所座暙0、m + 1を持぀点を遞択したす。 最初のステヌゞに座垭を割り圓おた埌、2番目のステヌゞから人を遞別し、最小限の堎所から自由な堎所に熱心に配眮したす。
この問題は、この貪欲なアルゎリズムの蚘述に察応する、最倧でO  nm  2 の挞近線を䜿甚した適切に蚘述された゜リュヌションで構成されおいたした。 セットを䜿甚する堎合、挞近性をO  nm log  nm に枛らすこずができたす



B.サボテン恐怖症


制限時間 2秒
256 MBのメモリ制限

状態

ツリヌは、埪環のない接続された無向グラフです。 ゚ッゞサボテンは、ルヌプず耇数の゚ッゞのない接続された無向グラフであり、各゚ッゞは倚くおも1぀の単玔なサむクルにありたす。


Vasyaにはrib骚サボテンがあり、各rib骚はある色で塗られおいたす。 Vasyaは、サボテンから最小数の゚ッゞを削陀しお、ツリヌを取埗したいず考えおいたす。 同時に、圌は残りのdifferent骚の間の異なる色の数が最倧であるこずを望んでいたす。 圌がグラフにいく぀の異なる色を残せるかを芋぀けるのを助けおください。


入力圢匏

最初の行には2぀の敎数n 、 m 2≀n≀10,000が含たれおいたす-それぞれVasyaグラフの頂点ず゚ッゞの数。


次のm行は、3぀の敎数u 、 v 、 c  1≀u 、v≀n、 u ≠ v 、1≀c≀m-次の゚ッゞを接続する頂点ずその色を瀺したす。 説明したグラフが゚ッゞサボテンであるこずは保蚌されおいたす。


出力圢匏

単䞀の敎数-グラフに残せる異なる色の最倧数を印刷したす。


䟋

入力デヌタ
4 4
1 2 4
2 3 1
3 4 2
4 2 3
むンプリント
3

入力デヌタ
7 9
1 2 1
2 3 4
3 1 5
1 4 5
4 5 2
5 1 6
1 6 4
6 7 6
7 1 3
むンプリント
6

解決策
グラフをブロックサむクルずブリッゞに分割したす。 各サむクルから1぀の゚ッゞを削陀し、同時にグラフにできるだけ倚くの異なる色を残す必芁がありたす。
巊葉がブロック、右葉が色の2郚グラフを䜜成したしょう。 ブロックから、このブロック内の各色に゚ッゞを描画したす色が耇数回発生する堎合は、耇数の゚ッゞを描画したす。 花rib骚からストックたで。 ブロックがブリッゞの堎合、゚ッゞの゜ヌスからブロックたで、スルヌプットは1、それ以倖の堎合はサむクル長より1少ないスルヌプット。 このグラフの最倧フロヌが答えになるこずは容易にわかりたす。
この問題でも、スレッドを䜿甚せず、 O  n で機胜する゜リュヌションがありたす。これを挔習ずしお怜蚎するこずをお勧めしたす。


C.宿題


制限時間 3秒
256 MBのメモリ制限

状態

今日、Petyaは数孊の授業でひどく振る舞い、教垫は圌に䜙分な宿題を䞎えるこずで圌を眰したした。 圌女は3぀の数字n 、 m 、 kを圌に枡し、サむズn × mの長方圢の垂束暡様のボヌドに1぀以䞊のセルをマヌクするように指瀺したした。 マヌクされたセルは、䞀貫した図を圢成する必芁がありたす。 この堎合、3぀のマヌクされたセルを遞択しお「コヌナヌ」を圢成するには、正確にk個の方法が必芁です。遞択された3぀のセルはすべお2×2の正方圢内にありたす。


セルのセットは、接続された図を圢成したす。セットのセルから他のセルに到達できる堎合、プロセス䞭にセルから偎面に移動したす。 Petyaはタスクが簡単ではないこずを知っおいるので、プログラマヌおよび芪友ずしお、このタスクで圌を助けるように頌みたした。


入力圢匏

入力には、いく぀かのテストスむヌトが含たれたす。 最初の行には、テストの数t 1≀t≀100が含たれおいたす。 以䞋の各tテストは、3぀の数倀n 、 mおよびkの 1行で蚘述されたす3≀n、 m 、 n ×m≀10 5、0≀k≀10 9 。 すべおのテストの合蚈n × mが10 5を超えないこずが保蚌されおいたす。


出力圢匏

各テストに぀いお、その答えを印刷したす。 答えが存圚する堎合、 m文字のn行を印刷したす。「*」はマヌクされたセルを意味し、「。」 -マヌクなし。 答えが存圚しない堎合は、1行に-1を出力したす。 各テストの埌、最埌を陀いお、空の文字列を出力したす。


䟋

入力デヌタ
3
3 3 4
3 3 5
3 3 3
むンプリント
**。
**。
...

***
**。
...

。**
**。
* ...

解決策
この問題は、建蚭的なアルゎリズムを発明するこずで解決されたす。
  • すべおのn 、 m <5のケヌスの分析を簡玠化するために、培底的な怜玢を開始したす。 ここでは、非挞近的な最適化を避けおTL内に保぀ために、事前蚈算を行う䟡倀がありたした。
  • さお、䞀般性を求めるこずなく、m≥5ず仮定できたす。
  • テヌブルに埓っお星を䞀列に䞊べ始めたす䞊から䞋の行、巊から右の各行。 各スタヌ極端なスタヌを陀くを远加するず、4぀の新しいコヌナヌが远加されたす。 アスタリスクが远加されるず、3぀の新しいコヌナヌが行の終わり、先頭に远加されたす-1. kが4未満になるか、テヌブルに空きセルが5぀未満になるずすぐにプロセスを停止したす。
  • むベントのさらなる開発は、2぀のケヌスに分けられたす。
    • フリヌラむンを残したした
    • 空き回線がありたせん
  • 最初のケヌス。 空き線が残っおいる堎合、 kが4未満であるため、䞭断したした。
    • k = 0远加する必芁はありたせん、すべおが䞀緒になりたした
    • k = 1珟圚の行に2぀以䞊のアスタリスクがすでにある堎合は、次の行の先頭にアスタリスクを入れたす。そうでない堎合は、珟圚の行の終わりにアスタリスクを入れたす
    • k = 2珟圚の行に3぀以䞊のアスタリスクが既にある堎合は、次の行の2列目にアスタリスクを入れたす。そうでない堎合は、珟圚の最埌から2番目のセルに入れたす
    • k = 3珟圚の行にすでに4぀以䞊のアスタリスクがある堎合、次の行の1列目ず3列目にアスタリスクを入れたす。 3が蚭定されおいる堎合、2番目の列に次の列、最埌から2番目の列に配眮したす。 2の堎合-次の行の先頭から珟圚の行の最埌から2番目の列たで。 1぀の堎合-珟圚の行のm -1およびm -3列にアスタリスクを入れたす最初から番号を付けたす。
  • 2番目のケヌス。 テヌブルには、アスタリスクを配眮できる4぀の空きセルがありたす。 単玔なケヌスの列挙により、これらのセルにアスタリスクを入れるこずにより、 kの次の倀を取埗できるず掚枬できたす{0、1、2、3、4、5、6、8、9、12、15}。 これらのケヌスの分析は、挔習ずしお読者に任されおいたす。
  • たた、m≥5か぀k = 2 * m -1-8-ずいう3× mの長方圢の堎合も忘れないでください。この堎合、最初の列を空のたたにしお、残りの列を埋める必芁がありたす。



D.スラロヌム


制限時間 2秒
256 MBのメモリ制限

状態

少女マヌシャはりィンタヌスポヌツが倧奜きで、今日はスキヌスラロヌムに行かなければなりたせん。 トラックは回路図のn × mチェックボックスです。 いく぀かのセルを占める長方圢の障害物がフィヌルドに配眮されたす。 Mashaは、座暙1、1のセルからセル n 、 m に到達する必芁がありたす。 この堎合、各セルから、1぀䞊のセルたたは1぀右のセルに移動できたす。 障害物があるセルでは、取埗するこずは䞍可胜です。


したがっお、各障害物は2぀の方法で回避できたす。障害物は、高速道路に沿った移動軌跡の巊偎たたは右偎のいずれかに残りたす。 マヌシャは倚様性を愛しおおり、トラックに乗る方法はいく぀あるのだろうず考えおいたす。 ルヌトの通路は、マヌシャの軌跡の巊偎のパスず右偎のパスに障害物が少なくずも1぀ある堎合、異なるず芋なされたす。


あなたの仕事は、マヌシャが軌道に乗るためのさたざたな方法を芋぀けるのを助けるこずです。 答えは倧きく、Mashaは10 9 + 7を法ずする倀に満足したす。以䞋の図では、条件からのテストが分析されたす。



入力圢匏

入力の最初の行には、3぀の自然数n 、 m 、およびk 3≀n、m≀10 6、0≀k≀10 5 -それぞれ経路の次元ず障害物の数が含たれおいたす。 次のk行には、4぀の自然数x 1 、 y 1 、 x 2 、 y 2 1≀x 1≀x 2≀n 、1≀y 1≀y 2≀mが含たれたす-障害物の巊䞋および右䞊隅の座暙。 セル1、1および n 、 m には障害物がなく、すべおの障害物に亀差点がないただし、接觊できるこずが保蚌されおいたす。


出力圢匏

出力ファむルに単䞀の数字を出力したす。これは、トラックを通過するさたざたな方法の数を10 9 + 7で割った䜙りです。


䟋

入力デヌタ
3 3 0
むンプリント
1

入力デヌタ
4 5 1
2 2 3 4
むンプリント
2

入力デヌタ
5 5 3
2 2 2 3
4 2 5 2
4 4 4 4
むンプリント
3

解決策
たず、最初のセルから最埌のセルたでのすべおの可胜なパスを怜蚎したす。このパスでは、セルからの動きが䞊たたは右に移動し、障害物を越えたせん。 パス等䟡クラスの抂念を玹介したす。 定矩により問題の状態ず倉わらない堎合、パスは同じクラスにありたす。 この問題では、そのようなクラスの数を芋぀ける必芁がありたした。
動的蚈画法により問題を解決したす。 クラスごずに、最䜎パスを怜蚎したす。通過するセルの高さの合蚈は最小です。 動的プログラミングの状態は、特定のセルを通過するそのような䞋䜍パスの数です。 次に、障害物に出䌚うず、その䞊郚にあるセルを通過するすべおのパスを2぀に分けるこずができたす。 ぀たり、䞊郚境界より䞊のセルで障害物を凊理する堎合、䞊郚より䞋のセルの倀の合蚈を远加する必芁があり、そこからパスを分割できたす。
このアルゎリズムの単玔な実装にはO  nm メモリずO  nm 2 時間が必芁であったため、セグメントのツリヌを䜿甚しお、動的プログラミング遷移䞭に合蚈の蚈算を最適化し、フィヌルド党䜓だけでなく珟圚の列のみを保存する必芁がありたす。 したがっお、 O  m メモリが取埗され、ランタむムはO  n log m になりたす。


E.暗号


制限時間 2秒
256 MBのメモリ制限

状態

最近、ボルダは倧きな電子スコアボヌドを芋たした。 スコアボヌドでは数字が暗号化されおいたす。 数字自䜓はn桁で構成され、各数字はラテン文字で曞かれおいたす。 ボヌドの暪には、暗号化スキヌムを説明するプレヌトがありたす。 したがっお、各桁iおよび桁jに぀いお 、゚ンコヌドされるシンボルcが既知です。 この堎合、同じ文字を異なる数字に察応させるこずができたす。 1秒ごずに、スコアボヌドに゚ンコヌドされおいる数倀が1぀増えたす。 そしお、スコアボヌドで暗号化された数字のn桁すべおが9になった埌、1秒でスコアボヌドが非垞に倧きな音を出したす。


アンドレむは、スコアボヌドで最初に暗号化された番号を知っおいたす。 圌は、Boryaがこの数倀を正確に決定できる秒数を知りたした。 Boryaが正確に時間を枬定できるこず、およびスコアボヌド䞊の数倀が初めおスコアボヌドを芋た1秒埌に正確に倉化するこずを考慮しおください。


入力圢匏

最初の行には、敎数t 1≀t≀100-テストケヌスの数が含たれおいたす。 各テストの説明は、数字n 1≀n≀18-暗号化された数字の文字数で始たりたす。 次の行には、スペヌスなしのn桁の数字先行れロが含たれる堎合がありたす-暗号化された番号が含たれたす。 次のn行には、それぞれ10文字が含たれおいたす。 行iのj番目の文字がcに等しい堎合、 i番目の桁j -1䞊䜍ビットに぀いおは前に説明したすは文字cで゚ンコヌドされたす 。


出力圢匏

各テストケヌスに぀いお、先頭にれロを付けない単䞀の敎数数倀を埩号化するのに必芁な最小秒数を個別の行に出力したす。


䟋

入力デヌタ
3
2
42
abcdefghij
ゞフフェドクバ
2
42
aaaaaaaaaaa
aaaaaaaaaaa
1
2
abcdabcdff
むンプリント
0
58
2

解決策
最初に、正しい答えを芋぀けるが、長期間有効な゜リュヌションを怜蚎したす。 Boryaが元の数字を正確に刀断できるずはどういう意味ですか これは、圌が他の番号ず区別できるこずを意味したす。 したがっお、他のすべおの数倀を怜蚎し、それぞれに぀いお、指定された数倀ず区別できる最初の瞬間を芋぀けたす。 これを行うには、最初の瞬間に2぀の数倀がどのように゚ンコヌドされるかを比范したす。 同じ方法で゚ンコヌドされおいる堎合は、各ナニットに远加しお再床比范したす。 2぀の数倀が別々に゚ンコヌドされるたで、この方法を続けたす。 突然、数字の1぀がスコアボヌドに収たらない堎合、タスクの条件によっお、Boryaは倧きな音のためにそれを芋぀けたす。したがっお、珟時点で圌はそれを区別するこずができたす。
゜リュヌションの䞻なアむデアは、番号が10 n -1 個すべおず区別できるこずを確認する必芁がないこずです。 正確に1桁が倉曎された数字ず数字を区別できる堎合、他のすべおの数字ず区別できるず䞻匵されおいたす。 したがっお、数字を他の9 n個ず区別できる最初の瞬間を芋぀ける必芁がありたす。
このサブタスクは10 nよりも速く解決できるこずに泚意しおください。 これを行うには、2぀の数倀ずその倀を区別できるカテゎリを゜ヌトしたす。 その埌、数倀の1぀が正確にこの倀を取る最初の瞬間を芋぀け、2぀の数倀を区別できるかどうかを確認したす。 したがっお、桁数から倚項匏時間で機胜する゜リュヌションが埗られたす。


F.アレむカバレッゞ


制限時間 3秒
256 MBのメモリ制限

状態

Mishaにはn個の敎数の配列がありたす。 圌は、配列の各芁玠に察しお、それを含む少なくずも1぀の遞択されたセグメントが存圚するように、 k個の異なるサブセグメントを遞択したいず考えおいたす。 同時に、ミヌシャは、各セグメントの数倀を合蚈し、結果の金額を合蚈するず、合蚈金額が最倧になるこずを望んでいたす。


入力圢匏

最初の行には2぀の敎数n 、 k 1≀n≀100 000、1≀k≀n・ n + 1/ 2-配列内の芁玠の数ず遞択するセグメントの数が含たれたす。


2行目には、 n個の敎数a i -50 000≀a i≀50 000-配列の芁玠が含たれたす。


出力圢匏

単䞀の敎数を印刷したす-各芁玠が少なくずも1぀のセグメントでカバヌされるようにk個のセグメントを遞択するこずで達成できるセグメント䞊の数倀の合蚈の最倧合蚈。


䟋

入力デヌタ
5 4
6 -4 -10 -4 7
むンプリント
11

解決策
たず、答えには必ずセグメントの最小  k - n 、0最倧和が含たれるこずに泚意しおください。 この問題を解決するために、 最小  k - n 、0最倧セグメントずそれらがカバヌする芁玠の合蚈ず、それらに続く明瀺的な圢匏のmin  k 、 n セグメントを芋぀けたす。 セグメントの合蚈倀ずFenwickツリヌのようなデヌタ構造によるバむナリ怜玢を䜿甚しおこれを行うこずができたす合蚈の特定の倀に察しお、Fenwickツリヌは、少なくずもそのような合蚈を持぀セグメントの数ず、少なくずもそのような合蚈を持぀セグメントの合蚈、および倚くのカバヌされた芁玠の䞡方を芋぀けるのに圹立ちたす、そしお、そのような数の番号を持぀すべおのセグメントをリストしたす。 ゜リュヌションのこの郚分は、 O  n log 2 n で実行できたす。
少し脱線したしょう。 n 2 log nの問題をどのように解決できるかを怜蚎しおください。 x-回答の最倧セグメント数 O  n バリアント、 最小  k - n 、0の最倧セグメントが回答に含たれるのでを芋おみたしょう。 むンデックスi 1 、...、 i mの芁玠はカバヌされないたたにしおおき、 k - xセグメントを䜿甚しおそれらをカバヌする必芁がありたす。 これらのk - xセグメントのそれぞれには、少なくずも1぀のi jthが含たれおいる必芁があり、2぀のセグメントはi jthセグメントに沿っお亀差できないこずに泚意しおください。 これらのk - xセグメントを蟞曞匏に䞊べ替えるこずができ、 l番目のセグメントが番号i jをカバヌし、 l + 1番目のセグメントがi j + 1をカバヌする堎合、これら2぀のセグメントはセグメントのサブセグメント[ i j + 1 ; i j + 1-1]、たたはセグメントの䞀郚のサブセグメントで亀差しない[ i j + 1; i j + 1-1 ]。 したがっお、各セグメントに察しお[ i j + 1; i j + 1-1]最倧サブセグメントの最倧倀から最小倀を匕いた数を曞き蟌みたす。最適なカバレッゞは配列党䜓を取埗するこずですが、最小プレフィックス i 1たで 、最小サフィックス i mから、およびk- x曞き出された最倧数。 したがっお、圌らはn 2 log nの問題を解決したした。
この゜リュヌションを最適化するために、セグメント[ i j + 1; i j + 1-1 ]順序付きセット。 新しい最倧セグメントを远加する堎合、いく぀かのi j -xを削陀し、圱響を受けるセグメントの最倧および最小サブセグメントをセットで再蚈算する必芁がありたすこれはO 1で実行でき、サブセグメントのプレフィックスずサフィックスの最倧量を知っおいたす、合蚈k - xの最倧倀を取埗したすセットからの数字。 削陀の総数はi j -x O  n なので、この郚分はすべおO  n log n で機胜したす。


***
ロシアコヌドカップチャンピオンシップは、ロシアのIT産業の発展を目的ずしたMail.Ruグルヌプの取り組みの1぀であり、 IT.Mail.Ruリ゜ヌスによっお統合されおいたす。 IT.Mail.Ruプラットフォヌムは、ITに興味があり、この分野で専門的に開発しようず努力しおいる人々のために䜜成されたした。 このプロゞェクトは、テクノパヌクMSTUでの教育プロゞェクトであるロシアAIカップ、ロシアコヌドカップ、ロシアディベロッパヌズカップのチャンピオンシップを組み合わせたものです。 バりマン、モスクワ州立倧孊テクノスフィア MIPTのM.V. LomonosovずTechnotrek さらに、IT.Mail.Ruでは、人気のあるプログラミング蚀語の知識をテストしたり、ITの䞖界から重芁なニュヌスを孊んだり、関連するむベントやITトピックに関する講矩の攟送を芋たり芋たりするためにテストを䜿甚できたす。

Source: https://habr.com/ru/post/J310376/


All Articles