テクノキュヌブファむナル2016のタスクの分析

MIPTおよびMSTUず連携したCompany Mail.Ru Group。 N.E.バりマンは、 テクノキュヌブ -8幎生から11幎生たでの孊生向けの最初のプログラミングオリンピアヌドを芁玄したした。 ロシアの20以䞊の郜垂の生埒ずCISは、最も才胜のある若いプログラマヌの称号をめぐっお戊いたした。 合蚈で2132名の参加者がオリンピアヌドに登録し、113名がフルタむムの決勝戊に参加したした。これはMSTUの2぀の䌚堎で同時に行われたした。 N. E.バりマンずMIPT。 この賞は、Mail.Ru Groupのオフィスで開催されたした。 オリンピックはCodeforcesプラットフォヌムで開催されたした。







連䞭は3぀の問題を解決するために3時間を費やしたした。これはロシアの䞻芁な技術倧孊の教垫ず専門家でした。 最埌の、最も困難なのは、参加者の䞀人、最終的には優勝したVladislav Makeevのみです。 合蚈で、オリンピアヌドの27人の参加者が勝者ずなり、I、II、III床の卒業蚌曞をそれぞれに分けたした。 受賞者Iの孊䜍は入孊のためにさらに8ポむント、IIおよびIIIの孊䜍の保有者-それぞれ6ポむントを受け取りたした。 1䜍はVladislav Makeevモスクワ、11幎生、2䜍-Alexandra Drozdovaニゞニノノゎロド、10幎生、3䜍-Grigory Reznikovモスクワ、11幎生です。 受賞者の完党なリストはこちらから入手できたす 。 この投皿では、フィナヌレの目的ずその解決策を理解するこずをお勧めしたす。











問題A.レベル80プログラマヌ



アむデアの著者ミハむル・ミルザダノフ、SSU

開発アレクサンダヌ・フロロフ、SSU

トピックモデリング



状態



kレベルのプログラマになるこずを倢芋おいたす。 圌は蚈画を実行するためにn日を持っおいたす-圌のレベルを1日からk日たで増加させたす。 レベルxからレベルx + 1に進むには、レベルxを受け取った瞬間からx個の問題を解決する必芁がありたす。



i日目には、 a iのタスクが1぀の有名なサむトで公開され、それらのすべおは公開の日にのみ解決に䜿甚できたす。 毎日、Vasilyは次々に問題を順番に解決したすが、 i日目にはi個の問題しか解決できたせん。 最埌のレベルxを受け取った瞬間からVasilyによっお解決されたタスクの総数がxに等しくなるずすぐに、圌は停止し、その日はそれ以䞊の問題を解決したせん。 この堎合、1日の終わりに、圌は次のレベルx + 1に移行したす。同時に、圌はVasilyがその日に解決できなかった問題を解決するこずはありたせん。



次のレベルに移動するず、解決された問題は蓄積されたせん。぀たり、各xがレベルx + 1に移動するため、Vasilyはxの問題を解決する必芁がありたす。



Vasilyは1からnたでい぀でもクラスを開始できたすが、圌はkレベルのプログラマヌになる日ず勉匷を開始する日ずの差を最小限に抑えたいず考えおいたす。







入力デヌタ



入力の最初の行には、2぀の敎数nずk 1≀n≀500、2≀k≀n + 1が含たれおいたす-それぞれ、Vasilyが達成したい合蚈日数ずレベル。



2番目の行には、 n個の敎数a 1 、 a 2 、...、 a n 1≀a i≀500が含たれたす。ここで、 aiは、 i番目の日に解決できるタスクの数に等しくなりたす。



むンプリント



単䞀の敎数-Vasilyがプログラミングのk番目のレベルに到達できる最小日数を出力したす。



Vasilyが目的を達成できない堎合は、-1を印刷したす。



解析



たず、問題を解決する過皋で䌑憩を取るこずは決しお有益ではないこずに泚意しおください。なぜなら、い぀でも残っおいるタスクの䜙剰は単玔に䜿甚できないからです。



したがっお、倉曎する意味があるのは、ポンピングが始たる日だけです。 初日に考えられるすべおのオプションを芋おいきたしょう。それぞれに぀いお、プログラマヌのビルドプロセスをシミュレヌトしたす。 この゜リュヌションの耇雑さはOn 2 です 。これは、開始日nおよび各日に察しお可胜なオプションであるため、シミュレヌションはOnの間に行われたす。



タスクB.手玙の亀換



アむデアの著者GLEB EvstropovHSEおよびMikhail MirzayanovSSU

開発アレクサンダヌ・フロロフ、SSU

トピックハミング距離、カりント



状態



Ivanは新聞を読むのが倧奜きで、特に政治ニュヌスずスポヌツニュヌスに興味がありたす。 たた、Ivanにはお気に入りのstringがありたす。



Ivanには自由な時間が倚く、圌は非垞にすばやく読みたすが、1日に興味を持っおいる新聞はそれほど倚くありたせん。 そのため、最近、別の新聞を読んだ埌、むノァンは新聞に曞かれたテキストtでのお気に入りの文字列sの出珟回数を郚分文字列ずしお怜蚎し始めたした。 ストリングxのサブストリングは、ストリングxの連続した文字のシヌケンスです。



しかし、すぐにむノァンは出珟回数に非垞に迅速に察応し始め、次の新聞を読んだ埌、新聞tのテキストの倉曎された行sの出珟回数を最倧にするように、 k文字以䞋のお気に入りの行に眮き換えるこずを決めたした。



あなたの仕事は、Ivanが新聞tのテキストのk個以䞋の文字を眮換した埌、お気に入りの文字列sの最倧出珟回数を蚈算するこずを支揎するこずです。 Ivanは正確にk個の文字を眮き換える必芁はありたせん。おそらく、1文字を眮き換える必芁さえありたせん。 文字列sの文字を他の文字に眮き換えるこずができたす。







入力デヌタ



入力の最初の行には、3぀の敎数n 、 m 、およびkが含たれおいたす1≀n≀m≀250、0≀k≀n-文字列sの長さ、文字列tの長さ、およびIvanがお気に入りの文字列で眮き換えるこずができる文字数それに応じお。



入力の2行目には、空でない文字列sが含たれたす。これは、英語のアルファベットのn個の小文字-Ivanのお気に入りの文字列です。



入力の3行目には、英語のアルファベットのm個の小文字で構成される空でない文字列tが含たれたす-新聞に曞かれたテキスト。 文字列sの長さが文字列tの長さを超えないこずが保蚌されおいたす。



むンプリント



単䞀の敎数-新聞tのテキストのk個以䞋の文字を眮換した埌のIvanのお気に入りの行sの最倧出珟数を出力したす。



解析



゜ヌス文字列sのすべおのバリ゚ヌションを通過し、それらの答えを読み取る単玔な゜リュヌションには、指数関数的な耇雑さがありたす。 ただし、少なくずも1぀のオカレンスを持぀異なるバリアントは||より少なくなるこずに泚意しおください。 t | -| s | + 1、぀たり、文字列sを文字列tに「アタッチ」する方法の数。



蚈算の順序を倉曎し、行sから行tぞの適甚のすべおの可胜な䜍眮を゜ヌトし、それぞれに぀いお、この䜍眮に゚ントリを取埗するために倉曎する必芁がある䜍眮ず蚘号を正確に蚈算したすたたはk個の倉曎に適合できないず刀断したす。 必芁な倉曎を゚ンコヌドするには䜕らかの方法が必芁なので、埌でアプリケヌションの2぀の異なる䜍眮で同じ倉曎が必芁かどうかを区別できたす。 この問題では、文字列tずsの長さにわずかな制限があったため、ほがすべおの倚項匏解を䜿甚できたした。 たずえば、必芁な倉曎は単に長さの配列ずしお衚すこずができたす| s |。



次に、同じ倉曎のグルヌプを遞択し、同じサむズのグルヌプを芋぀けたす。 これは、゜ヌトやハッシュを䜿甚するなど、さたざたな方法で実行できたす。



問題C.賞金



アむデアず開発の著者Alexey Dmitriev、MIPT

テヌマ数孊



状態



HackerCookは、倧芏暡な賞金プヌルで壮倧なスポヌツプログラミングチャンピオンシップを開催したしたが、賞金の分配はただ発衚されおいたせん。 最終的な配垃に぀いお知られおいる唯䞀のこずは、䞊䜍の参加者が䞋䜍の参加者よりも少ない賞金を受け取るこずです。



珟圚、HackerKookの埓業員の1人は、友人ができるだけ倚くのお金を受け取るこずができるように賞金を配垃したいず考えおいたす。 埓業員がお金を最適に分配する堎合、各参加者が受け取る賞金の額を決定したす。







入力デヌタ



入力の最初の行には、2぀の敎数nおよびk 1≀k≀n≀1 000 000-参加者の総数ずHackerCook埓業員の友人の数が含たれおいたす。



2行目には、 k個の異なる敎数a i 1≀a i≀n が昇順で含たれおいたす-な開発者の友人が取った堎所。



むンプリント



n個の非負敎数b 1 、 b 2 、...、 b n  、぀たり、 i番目の堎所に参加した参加者は、 賞金プヌルの䞀郚。



可胜な答えが耇数ある堎合は、どれでも印刷できたす。



出力圢匏で蚘述された条件を満たす最適な回答があるこずが保蚌されおいたす。



解析



簡単に説明するず、最初の数人の参加者にすべおのお金を均等に分配するためのすべおのオプションを怜蚎したす。これらのオプションの少なくずも1぀がベストアンサヌになりたす。



それを蚌明するには 最適な答えを怜蚎しおください。 その䞭の2人の参加者AずBに異なる正の金額を受け取っおもらい、収益aずbを瀺したすその埌0 < a < b 。 少なくずもbを受け取った人ずb未満を受け取った人のために、すべおの参加者を正の金額で分割したす。 これらのグルヌプには、それぞれXずYの参加者がおり、その䞭にそれぞれxずyの友人がいるず仮定したす数字xずyの少なくずも1぀は正です。



数kを遞択し、最初のグルヌプの各参加者の収益をk / X増やし、2番目のグルヌプでk / Y枛らしたす合蚈金額が保存されるこずに泚意しおください。 次に、友人の収益はkx / X-y / Yだけ倉化したす。 正ず負のkの䞡方を遞択できるため、倉曎埌に参加者が圌よりも倚くのお金を受け取らず、すべおの収益が負ではないこずに泚意しおください。 私たちの答えは最適であるため、 x / X = y / Y それ以倖の堎合は、目的の笊号の数kを遞択するこずで改善できたす。 kを遞択しお、2番目のグルヌプで参加者の1人のお金が0になるようにしたす。 プラスの勝利を収めた参加者の数は枛少したした。 正の賞金を獲埗したすべおの参加者が等しくなるたで、このプロセスを繰り返したす。



技術的には、タスクは非垞に簡単です。シヌケンスのすべおのプレフィックスの䞭で、その䞭の友人のシェアが最倧になるように遞択する必芁がありたす。 これは、単玔な線圢アプロヌチによっお行われ、珟圚の応答をa / b分数ずしお保存したす。



問題D.花



アむデアず開発の著者ミハむル・ミルザダノフ、SSU

トピック欲、むベント凊理



状態



Vasyaは3月8日にマヌシャに花束を莈りたいず考えおいたす。 圌は街の倖の森にある秘密の道を知っおいたす。それに沿っお、矎しい、そしお最も重芁なこずは、自由な花が咲きたす。 パスは盎線で衚すこずができ、Vasyaは最初にポむント0でパスに珟れ、花を摘むのに時間を費やすこずなく1の速床で移動するず考えるこずができたす。



花番号iは座暙x iのパスのポむントで成長し、Vasyaがそれを拟った埌、花はさらにt i単䜍の時間生き続けたす。 圓然、Vasyaはブヌケの䞭に奇数個の花を拟わなければならず、マヌシャず䌚うために圌がそれらをポむント0に持っおきた瞬間にそれらはすべお生きおいなければなりたせん i番目の花が摘たれおからt t単䜍の時間埌に正確にもたらされた堎合、生きおいるずは芋なされたせん。



Vasyaはたっすぐな人間であり、Mashaのためにさえ、圌は2回以䞊曲がる぀たり、パスに沿っお移動方向を倉える準備ができおいたせん。 圌が奇数サむズの最倧の花束を集めるのを手䌝っおください。







入力デヌタ



入力の最初の行には、単䞀の敎数n 1≀n≀200 000-パスに沿っお成長しおいる花の数が含たれおいたす。



次のn行のそれぞれには、2぀の敎数x iおよびt i –10 9≀x i≀10 9、0≀t i≀10 9が含たれたす-i番目の花の座暙ずその埌に生存する時間圌はそれぞれ食い物にされたす。 1぀のポむントで耇数の花が成長できたす。



むンプリント



単䞀の数字を印刷-花束に花の最倧可胜な数。 1぀の花からも花束を収集できない堎合は、0を印刷したす。



解析



Vasyaが移動方向を2回以内に倉曎する準備ができおいるずいう条件は、答えの圢匏を明確に定矩したす最初に停止する2぀の偎面の1぀に行き、次に戻り、すべおの花を集め、0を通過し、ある点たで反察に行きたす、再び向きを倉えお0に戻り、パス内のすべおの花を再び収集したす。 最埌のタヌンの前にポむント0からどれだけ離れるかに぀いおは、䞀方では、戻る途䞭で収集できる花の数に䟝存し、他方では、最初のセクションで収集された花の数はすでにフェヌドしたす。



䞀般性を倱うこずなく、最初にポむント0から巊負の座暙に移動し、次に右に移動したず仮定したす。 次に、「䞖界を回しお」、察称問題を解決したす。 もちろん、最倧サむズの花束を遞び、この最倧倀に最も近い奇数を芋぀けたす。



察応するiに぀いおx i < t iの堎合、ポむント0の右偎にある花はMashaに配信できたす。 ポむント0から座暙Rたで右に移動したす。その埌、ポむントiの巊にある花iは 、 t i + x i -2 R > 0たたはR < t i + x i / 2.したがっお、 n個のむベントが正の座暙を持぀光線に沿っお配眮され、それぞれが新しい花を远加するか、削陀したす。 0から最倧むベントの座暙に進み、最倧の正のバランスを芋぀けたす。 1点および敎数点の間にあるむベントを慎重に凊理する必芁がありたすここでは、すべおの座暙に2を掛けるこずで問題が解決されたす。



チャレンゞE.バヌランドホッケヌリヌグ



アむデアず開発の著者Alexander Ostanin、MIPT

トピック数孊、グラフ



状態



バヌランドホッケヌリヌグの遞手暩では、 nチヌムが参加したした。 トヌナメントはラりンドロビン方匏で開催されたす。トヌナメントには匕き分けはありたせんが、各チヌムはそれぞれ1詊合のみを行いたす。 埓来のトヌナメントずは異なり、バヌランドホッケヌリヌグでの賞金の分配は、チヌムの最終順䜍ではなく、勝利数に䟝存したす。 ぀たり、賞品は、少なくずもwゲヌムに勝ったすべおのチヌムに授䞎されたす。 ホッケヌの専門家ドン・ベリヌは、このトヌナメントの結果に基づいお、正確にk個のチヌムが賞品を受け取るこずができるかどうか疑問に思っおいたす。 そのようなトヌナメントが存圚する堎合、各詊合の勝者を撀回する必芁がありたす。







入力デヌタ



唯䞀の入力行には3぀の数字n 、 w 、 k 2≀n≀1000、0≀w≀n、0≀k≀nが含たれたす-参加チヌムの数、賞品を受け取るための最小勝利数、および専門家によっお予枬されるトヌナメントの勝者の数。



むンプリント



そのようなプロパティを持぀トヌナメントが存圚しない堎合、出力の1行に「NO」匕甚笊なしを印刷したす。

それ以倖の堎合は、最初の行に「YES」ず印刷したす匕甚笊なし。 次に、長さnの n行を印刷したす。それらのi番目のj番目の文字は、チヌムiずjの間の䞀臎に察応する必芁がありたす。 i = jの堎合、察応するキャラクタヌは0である必芁がありたす。チヌムiがチヌムjを砎った堎合、このキャラクタヌは1です。それ以倖の堎合は0です。



解析



より難しい問題を解決したす最初のkチヌム間の最小ポむントが可胜な限り高く、最埌のn-kチヌム間の最倧ポむントが可胜な限り䜎いトヌナメントを構築したすいく぀かのトヌナメントでは、これらの倀の最適な倀が同時に達成されるず䞻匵されおいたす。 このトヌナメントが答えであるか、答えがありたせん。



明らかに、最適なトヌナメントでは、最初のkチヌムのそれぞれが最埌のn-kのそれぞれに察しお勝぀必芁があり、最初のすべおのチヌムがどのようにプレヌするか、最埌のすべおのチヌムがどのようにプレヌするかを決定する必芁がありたす。 最初のkチヌム間のマむクロトヌナメントの最小ポむントはできるだけ高く、最埌のチヌム間のトヌナメントでは最倧ポむントをできるだけ䜎くする必芁がありたす。



mチヌムをトヌナメントに参加させ、 mチヌムを奇数にしたしょう。 次に、 m頂点の完党なグラフでは、頂点のすべおの角床が偶数になりたす。これは、オむラヌサむクルが含たれおいるこずを意味したす時間Om 2 で構築できたす。 サむクルに沿っお゚ッゞを方向付け、゚ッゞが勝者チヌムから敗者に぀ながるず蚀うず、各チヌムが正確にm-1/ 2回勝ったトヌナメントを獲埗したす。



mを偶数にしたす。 その堎合、すべおのチヌムで同じポむント数のトヌナメントを構築するこずは䞍可胜であり、最埌のチヌムのポむントはm-2/ 2ポむント以䞋です。 ただし、1぀の頂点をスロヌし、前の段萜のアルゎリズムを残りのm -1チヌムに適甚し、残りの半分のチヌムに勝利チヌムを蚭定するず、このプロパティを持぀トヌナメントを構築できたす。 結果のトヌナメントでは、チヌムの半分m-2/ 2ポむント、および残りの半分-m / 2ポむント。



最も「偶数」のトヌナメントを構築するこの方法は、最初のkチヌムず最埌のn-kチヌムの䞡方に適しおいたす。 最埌に、それが本圓に答えであるこずを確認したす぀たり、最初のチヌムはすべお少なくずもw回勝ち、残りはw回未満勝ちたした。



問題F.カヌル゜ン



アむデアず開発の著者グレブ゚ノストロポフ、HSE、ミハむルミルザダノフ、SSU

トピック欲、動的プログラミング



状態



20幎が経ちたした。 カヌル゜ンは倪っおいお、もはや飛びたせん。 子䟛は仕事を埗お、トップマネヌゞャヌになり、珟圚、 n階の巚倧な家に䜏んでいたす。



カヌル゜ンは子䟛を蚪問するこずにしたした。 もちろん、圌は埒歩で登る぀もりはないので、1階でカヌル゜ンぱレベヌタヌに入りたす。



゚レベヌタのボタンは䞋から䞊に配眮されおいるため、高さhの人は1からhたでの階に察応するボタンに到達できたす。 i - h i , , . , i - , i . , .



, , , . i , , i .







入力デヌタ



n h (2 ≀ n ≀ 10 6 , 1 ≀ h ≀ 10 9 ) — , , . h 1 , h 2 , ..., h n – 1 (1 ≀ h i ≀ 10 9 ), i - , i - .



むンプリント



n – 1 ans 1 , ans 2 , ..., ans n – 1 , ans i , , , i - . , i - , , -1 ans i .





, . , , x , . , , . O(n) .



— , , . , , :



f i — , , 1 i ;

g i — , , 1 i ( , ).



a i i , b i — . f i = f ai + 1, g i = g bi + 1, a i = a bi , g i = f bi + 1 .



, . - , . , i k – 1 + g i , k — .



G. , ,



: ,





«, , ». n . : , . , ( , , ), . w , — d , — 0 . — .



, , n r , s p . r i - , i - , s — , p — .



, . , , , .







入力デヌタ



n , w d (1 ≀ n ≀ 100 000, 0 ≀ d ≀ w ≀ 10 9 ) — , .



n , r, s, p , — .



むンプリント



— , .





t . f(t) , ; f( ) . t n , f(t) = 0.



t n . , , r (), : f(t + p) ( — , ), d + f(t + r), w + f(t + s) . - (, t + p ), f(t) = ∞. ; , , f(t) .



. t , f(t) , — , — , . , . O(n 2 ) .



— . , s , «» , ( ). O(|s|) ; , (, ).



. f , , w f . , f «» : L w ( L – 1).



. , f , , n . .



, Russian Code Cup 2016 !



All Articles