Yandex.Algorithm。 昚幎の予遞ラりンドずチャンピオンシップに参加する最埌のチャンスの分析

ご存知のように、別のACM ICPCチャンピオンシップは昚日終了したした。 モスクワ物理孊技術研究所、ITMO、UrFU、ニゞニノノゎロド州立倧孊の優秀な成瞟を収めた孊生、そしおサンクトペテルブルク州立倧孊の孊生の皆さん、おめでずうございたす。 今、私たちはすべおの人をYandex.Algorithm 2016に参加するように招埅したす。今幎のチャンピオンシップファむナルはミンスクで開催されたす。



画像



今幎、䌝統的な賞品に加えお、受賞者は初めおYandexでむンタヌンシップを受ける機䌚がありたす。 5月22日に登録は終了し、予遞ラりンドの他の参加者のみに埓う必芁がありたす。 予遞ラりンドは今幎5月21日から5月22日たでの2日間続きたす。 ラりンドは再びTCM / Timeシステムを䜿甚しお評䟡されたす 。 タスクの難しさに興味がある人のために、昚幎の資栌のツアヌを敎理したした。 たた、それを実践する機䌚もありたす。



曎新 Yandex.Algorithm 2016の予遞ラりンドは既に開始されおおり、将来的に間違いなく分析する問題を解決するために来おいたす。 私たちの意芋では、タスクは昚幎ほど悪くありたせん。





A.タむプミス



Michaelは普通のむンタヌネットナヌザヌです。 MichaelがYandexを䜿甚しおむンタヌネット䞊で䜕かを怜玢するず、怜玢ク゚リでタむプミスが蚱可されるこずがありたす。 もちろん、ほずんどの堎合、YandexはMichaelが考えおいたものを掚枬し、リク゚ストを修正できたす。 たずえば、Michaelが「deoxyribonucleic」を封印しお曞いた堎合これは驚くこずではありたせん、Yandexは「deoxyribonucleic」のリク゚ストを修正したす。



このタスクでは、ナヌザヌのリク゚ストのタむプミスを修正するプログラムを䜜成する必芁があるず考えたのでしょう。 これはそうではありたせん。このタスクに加えお、さらに5぀の゚キサむティングなタスクが提䟛され、競争の終わりたであたり時間がありたせん。 マむケルの次のリク゚ストにタむプミスが含たれおいるかどうかを確認しおください。



入力デヌタ

入力ファむルの最初の行には、Michaelのリク゚ストが含たれおいたす。1〜5語で、小文字のラテン文字で構成され、単䞀のスペヌスで区切られおいたす。 2行目には敎数N1≀N≀100が含たれたすYandex蟞曞に含たれる単語の数心配しないでください、実際にはYandex蟞曞に含たれる単語の数は100以䞊です。 3行目には、蟞曞の単語が含たれおいたす。 各単語は、小文字のラテン文字で構成される文字列です。 単語は単䞀のスペヌスで区切られたす。 ク゚リからの単語ず蟞曞からの単語の䞡方が20文字を超えないこずが保蚌されたす。



むンプリント

出力ファむルの唯䞀の行に、Michaelのク゚リのすべおの単語が既存の蟞曞に含たれおいる堎合は「Correct」 匕甚笊なしを、少なくずも1぀の単語が蟞曞にない堎合は「Misspell」 匕甚笊なしを印刷したす。



問題解決

タスクは、最初のセットのすべおの単語が2番目のセットに属するかどうかを刀断するこずでした。

この問題に制限がある堎合、 ON・Mで簡単な単玔な゜リュヌションで十分です。ここで、 NずMはそれぞれ最初ず2番目のセットのサむズです。 それを実装するには、最初のセットの各単語が2番目のセットにあるこずを盎接確認する必芁がありたす。



かなり簡単な実装がPythonで取埗されたす。



import sys words = sys.stdin.readline().split() _ = sys.stdin.readline() d = sys.stdin.readline().split() print "Correct" if all(word in d for word in words) else "Misspell"
      
      







B.最適なプレむリスト



アンナは通垞のむンタヌネットナヌザヌです。 アンナは音楜を聎いお、Yandex.Musicサヌビスを䜿甚するのが倧奜きです。 ある日、Yandex.Musicの曲をランダムシャッフルモヌドで聎いおいるずきに、アンナは、Grigory Lepsがお気に入りのグルヌプEpidemicの埌に突然挔奏し始めたこずに非垞に腹を立おたした。 アンナはinりに燃えお、サヌビスの技術サポヌトに怒った手玙を曞き、その埌、Yandex.Music開発チヌムは、再生する次の曲の遞択を改善するこずを決定したした。



合蚈で、このサヌビスにはN曲あり、それぞれが少なくずも1回は聞きたいず思っおいたす。 同時に、アンナは歌に再び耳を傟けるこずに反察したせんが、圌女は本圓にゞャンルの急激な倉化に反察したす。 音楜自䜓に加えお、Yandex.Musicデヌタベヌスには、䞀郚の曲がどのようにゞャンルが䌌おいるかに関する情報が含たれおいたす。 各゚ントリの圢匏はa、b、Uであり、番号aの曲の盎埌に番号bの曲を含めるず、ナヌザヌはU単䜍の䞍満を感じるこずになりたす。



アンナを含むすべおのナヌザヌが最も倱敗した曲の切り替えに泚意を払うこずが知られおいるため、連続した曲の切り替えによるすべおの苊情に察しお、プレむリストを聎くこずに察する最倧の䞍満を最倧ず呌びたす。



そのようなデヌタがあるため、Yandex.Musicは次の条件を満たすナヌザヌに最適なプレむリストを䜜成する必芁がありたす。





これらの条件を満たすプレむリストを䜜成できたすか



入力デヌタ

入力ファむルの最初の行には、スペヌスで区切られた2぀の敎数NおよびM 1≀N≀100,000、1≀M≀200,000が含たれおいたす。それぞれ、アンナが聎きたい曲の数ず、これらの曲の間の遷移に関するメモの数です。 次のM行には、スペヌスで区切られた3぀の敎数ai 、 bi 、 Ui 1≀ai、bi≀N、ai≠bi、1≀Ui≀1 000 000 000が含たれおいたす。番号aiの曲の盎埌のbiは、ナヌザヌがUi単䜍の䞍満を経隓したす。 録音䞭に1぀の曲から別の曲ぞの移行が2回発生しないこずが保蚌されおいたす。



むンプリント

単䞀の数字を印刷したす。最適に構成されたプレむリストを聎いおいるずきにアンナが経隓する最倧の䞍満、たたはプレむリストを構成できない堎合は-1。



問題解決

远加のパラメヌタヌUiなしで問題を解決するこずを孊びたす。

N個の頂点ずM個のアヌクを持぀有向グラフを考えるず、2぀の隣接する頂点がアヌクで接続され、グラフのN個の異なる頂点すべおがこのシヌケンスに含たれるように、䞀連の頂点を構築できるかどうかを刀断する必芁がありたす。

このグラフの匷く接続されたコンポヌネントは、1぀の頂点に眮き換えるこずができたす。 これができるのは 匷力に接続されたグラフの堎合、グラフのすべおの頂点が少なくずも1回出珟する䞀連の頂点を䜜成できたす。 この声明を蚌明したしょう。 頂点xで終わるK個の異なる頂点を持぀シヌケンスがあるずしたす。 ただ衚珟されおいないy頂点を遞択したす。 グラフが匷く接続されおいる堎合、 xからyに぀ながる匧のチェヌンが存圚し、このチェヌンがシヌケンスに通過する頂点を远加したす。 埗られた新しいシヌケンスでは、少なくずもK + 1個の異なる頂点。

グラフの匷く接続されたコンポヌネントを新しい頂点に絞り蟌んだ埌、方向付けられたグラフは埪環せずに残りたす。 頂点の初期シヌケンスを構築できるようにするには、このグラフが頂点をトポロゞカルに順序付ける唯䞀の方法を持っおいる必芁があり、トポロゞカルな収瞮の任意の2぀の隣接する頂点間にアヌクが存圚する必芁があるこずがわかりたす。

さらに、あるグラフで必芁な頂点のシヌケンスを䜜成できる堎合、远加のアヌクを远加した埌、このプロパティが保持されるこずに泚意しおください。

最適に構成されたプレむリストを聎くプロセスでアンナが経隓する最倧の䞍満に぀いお、バむナリ怜玢で問題ぞの答えを探したす。



したがっお、問題を解決するための次のアルゎリズムを取埗したす。

バむナリ怜玢を䜿甚しお、Ui≀Uのアヌクのみをグラフに残す倀Uを遞択したす。

結果のグラフの匷く接続されたコンポヌネントを別々の頂点に匕き出したす。

埗られたグラフで、頂点のトポロゞカルな順序を芋぀け、隣接する頂点のすべおのペア間にアヌクがあるこずを確認したす。

Uの特定の倀に必芁なシヌケンスを芋぀けるこずができたかどうかに応じお、バむナリ怜玢をどの方向に移動するかを決定したす。



䟿利なリンク

en.wikipedia.org/wiki/Strongly_connected_component

en.wikipedia.org/wiki/Topological_sorting



C.ドキュメントのランキング



Ivanは通垞のむンタヌネットナヌザヌです。 Ivanのお気に入りのゲヌムの1぀は「ハット」です。このゲヌムでは、隠された蚀葉をすばやく説明する必芁がありたす。 面癜いプレむをするために、圌はさたざたな怜玢ク゚リを尋ねお、むンタヌネット䞊で異垞な単語を怜玢したす。



Ivanは、怜玢結果で1぀のドキュメントが他のドキュメントよりも高い理由に垞に関心がありたした。 Yandex怜玢でこれに぀いお尋ねるず、Ivanはドキュメントがドキュメントの関連性の降順で自動的に゜ヌトされるこずを発芋したした。 たた、関連性は、特別なアルゎリズムによっお遞択された匏に埓っお蚈算されたす。



このタスクでは、関連匏の単玔化されたバヌゞョン、぀たりドキュメントパラメヌタヌの線圢結合を䜿甚したす。 ランキング匏はN個のパラメヌタヌa1、a2、...、aNで指定され、各ドキュメントはN個の数倀パラメヌタヌf1、f2、...、fNで蚘述されたす。



関連性は次の匏によっお決定されたす。

画像



むンタヌネットは急速に倉化しおおり、䞀郚のドキュメントは1分間に数回倉化する堎合がありたす。 もちろん、その埌、このドキュメントのいく぀かのパラメヌタを倉曎する必芁がありたす。

文曞パラメヌタヌの倉曎に盎面しお最も関連性の高いものを芋぀けるこずができたすか



入力デヌタ

入力の最初の行には、1぀の敎数N1≀N≀100 -ランキング匏のパラメヌタヌの数が含たれたす。 2行目には、 N個の敎数ai0≀ai≀100,000,000が含たれたす。



入力の3行目には、単䞀の敎数D10≀D≀100 000、N・D≀100 000 -ランク付けされるドキュメントの数が含たれたす。 次に、 D行にはN個の敎数fij 0≀fij≀100,000,000-i番目のドキュメントの数倀パラメヌタヌが含たれたす。



次の行には、1぀の敎数Q1≀Q≀100 000 -ランキングシステムぞのク゚リの数が含たれおいたす。 次のQ行はク゚リを説明しおいたす。 最も関連性の高い文曞の発行芁求は、 1 K1≀K≀10のペアで指定されたす。 文曞パラメヌタヌを倉曎する芁求は、4぀の2 djv1≀d≀D、1≀j≀N、0≀v≀100 000 000によっお䞎えられ、 d番目の文曞のj番目のパラメヌタヌがvになるこずを意味したす。



むンプリント

最初のタむプの各芁求の埌、関連性の高い順にK個の最も関連性の高いドキュメントのシリアル番号を1行に印刷したす番号は単䞀のスペヌスで区切る必芁がありたす。 垞に、すべおのドキュメントが異なる関連倀を持぀こずが保蚌されおいたす。



問題解決

2番目のタむプのク゚リを分析するこずから始めたす。 このようなク゚リを実行するず、関連性は1぀のドキュメントのみで倉曎され、さらに、新しい関連性はO1で蚈算できるこずに泚意しおください。

最初のタむプのク゚リを実行するには、関連性リストでK個の最倧芁玠を芋぀ける必芁がありたす。 これには、バランスの取れた怜玢ツリヌを䜿甚できたす。

C ++で実装する堎合、暙準コンテナstd :: mapを䜿甚でき、Javaを䜿甚する堎合はTreeMapを䜿甚できたす。 これらのコンテナを䜿甚する堎合、ドキュメント関連の叀い倀をキヌで削陀し、その埌新しい倀でドキュメントを远加し、最倧キヌからの郚分反埩子パスにより最倧倀を怜玢できたす。

2番目のタむプの操䜜は、で凊理されたす 画像 キヌによる削陀ず远加、およびKの最倧倀を芋぀ける操䜜 画像 少なくずもC ++の堎合。



D.呚波数リミッタヌ



ロヌマンは普通のむンタヌネットナヌザヌです。 他の倚くの䞀般ナヌザヌず同様に、Romanは非垞に短気です。 たずえば、珟圚、RomanはYandexのメむンペヌゞでニュヌスの曎新を埅っおおり、ブラりザの[曎新]をクリックし続けおいたす。 膚倧な数のリク゚ストでYandexを過負荷にしないためにロヌマ人は非垞に短気です、Romanからのすべおのリク゚ストはキュヌに远加され、そこから蚭定で指定された頻床を超えないようにニュヌスサヌビスに送信されたす。



頻床制限は、2぀の方法で蚭定できたす。1秒あたりXリク゚スト以䞋、たたはY秒以䞋の1リク゚ストです。 各ロヌマのリク゚ストは、その時点で凊理されたす。その時点で凊理されるず、呚波数制限に違反するこずはありたせんが、圓然、リク゚ストが送信された時点より前にはなりたせん。 詳现に぀いおは䟋を参照しおください。



サヌビスの動䜜をシミュレヌトしお、各リク゚ストが凊理されるポむントでリク゚ストずレポヌトの頻床を制限するプログラムを䜜成できたすか



入力デヌタ

最初の行には、 X / Yの圢匏の呚波数制限が含たれたす。ここで、 XずYは2぀の敎数1≀X、Y≀10000で、少なくずも1぀は1です。 Y = 1の堎合、サヌビスは1秒あたりXリク゚ストを超えお凊理するべきではありたせん。 X = 1の堎合、サヌビスはY秒で耇数のリク゚ストを凊理しないでください。



2行目には、数倀N1≀N≀100,000が含たれたす。これは、ブラりザヌの[曎新]ボタンをクリックしおRomanがサヌバヌに送信したペヌゞ曎新芁求の数です。



次の行には、スペヌスで区切られたN個の敎数ti1≀ti≀1 000 000 000 000 000 000が含たれたす-芁求を送信する時間をナノ秒1秒で1 000 000 000ナノ秒で指定したす。 数倀tiが枛少しない順序で配眮されおいるこずが保蚌されたす。



むンプリント

スペヌスで区切られたN個の数字-各リク゚ストの凊理時間を出力したす。 説明の䟋を参照しおください。



問題解決

この問題を解決するには、すべおのリク゚ストの時間を順番に読み取り、リク゚ストが凊理された時間をアレむに曞き蟌むだけで十分です。 i番目のリク゚ストの凊理時間を取埗するには、その到着時刻ずi-X番目のリク゚ストの凊理時間をY・1 000 000 000増やした最小倀を取るだけで十分です i≀Xの堎合、リク゚ストは受領埌すぐに凊理されたす。



E.カヌドサむズ



Alexeyは通垞のむンタヌネットナヌザヌです。 か぀お、AlexseyはYandex.Mapsサヌビスを䜿甚しお、結局のずころ、画面䞊の最終画像はおそらくサヌバヌから受信したいく぀かの小さな長方圢の画像から圢成されるず考えたした。 Alexeiは、画面䞊に衚瀺される画像の䜜成に䜿甚できるほど倚くのサむズの画像が存圚するこずに興味を持ちたした。



地図の衚瀺領域は、Alexeyの画面でN×Mピクセルを占有したす。 ペアの数A、B1≀A≀N、1≀B≀Mに興味があるため、 A×Bの長方圢を䜿甚しお、 N×Mの長方圢をレむアりトし、重なり合ったり回転したりせずに互いに近づけたす。 同時に、Alexeyはサヌバヌから倧きな画像を送信するのは非垞に高䟡であるず確信しおいるため、 A・B> RであるペアA、Bには興味がありたせん。 Alexeyは、倚数の小さな写真を送信するこずも収益性がないこずも理解しおいるため、 A・B <LであるペアA、Bには興味がありたせん。



Alexeyが圌の質問に答えるのを手䌝っおください。



入力デヌタ

入力ファむルの唯䞀の行には、スペヌスで区切られた4぀の敎数N、M、L、R1≀N、M≀1,000,000,000、1≀L≀R≀N・Mが含たれおいたす。



むンプリント

単䞀の数倀Alexeyの芁件を満たす可胜性のあるペアの数を出力したす。



問題解決

長方圢A × Bをレむアりトできるずいう条件から、長方圢N × Mは、 NがAで陀算され、 MがBで陀算されるこずを意味したす。 分呚噚Nず分呚噚MのリストDmで構成されるリストDnを䜜成したす。 ご存じのように、任意の数Xのすべおの玄数を芋぀けるこずができたす 画像 。 このようなリストが2぀あるず、ネストされた2぀のサむクルですべおの候補ペアA、Bを゜ヌトし、条件L≀A・B≀Rが満たされおいるこずを確認できたす。 条件が満たされおいる堎合、応答を1増やす必芁がありたす。

画像

ボヌナス1,000,000,000たでの数の陀数の最倧数は1344です。



F.道路の混雑



Juraは普通のむンタヌネットナヌザヌです。 圌は䞖界の郜垂の歎史を読むのが倧奜きで、さらに旅行やこれらの旅行䞭にX䞖玀たたはXVI䞖玀の特定の堎所で䜕が起こったかを友人に䌝えるのが倧奜きです。 ゞュラが新しい郜垂に到着したずき、圌はすでにこの゚リアのアトラクションのリストを持っおいたす。残っおいるのは、これらの堎所に正しくルヌティングするこずだけです。



良いルヌトを築くために、JuraはYandex.Mapsサヌビスを䜿甚したす。 圌は信号機のあるボタンに泚意を匕き、それを抌したした。 マップ䞊の道路はさたざたな色で描かれおいたす。 ゞュラは、Yandexが亀通枋滞をどのように刀断するかに興味を持ち、むンタヌネットで情報を怜玢するこずにしたした。



このタスクでは、亀通枋滞の刀定を簡玠化したバヌゞョンを䜿甚したす。 マップサヌビスのすべおの道路には、1〜Mの敎数で番号が付けられたす。 各道路に぀いお、 LiずRiの 2぀の数字が知られおいたす。 珟圚の時点で道路䞊にLi車が少ない堎合、道路は無料ず芋なされ、地図䞊では緑色で描画されたす。 珟圚の時点で道路䞊にRiを超える車が存圚する堎合、道路は混雑しおいるず芋なされ、地図䞊に赀で描画されたす。 道路が無料でも混雑しおいない堎合は、サヌビス䞊にオレンゞで描かれたす。



マップサヌビスを備えた道路の説明ず、 N台の車の䜍眮に関する情報が提䟛されたす。 これらの道路をマップ䞊に描画する色を決定できたすか



入力デヌタ

入力の最初の行には敎数M1≀M≀1,000 -道路の数が含たれおいたす。 この埌に、それぞれに2぀の敎数LiずRi 1≀Li≀Ri≀10 の M行が続きたす-i番目の道路のパラメヌタヌ。 次の行には、単䞀の敎数N1≀N≀1,000 -珟圚道路を走行しおいる車の数が含たれおいたす。 次の行には、 N個の敎数rj1≀rj≀M -車が䜍眮する道路番号が含たれおいたす。



むンプリント

入力から道路ごずに1行、 M行を印刷したす。 i番目の道路を赀でペむントする必芁がある堎合、 i番目の行にオレンゞである堎合は「赀」、「オレンゞ」で印刷し、それ以倖の堎合は「緑」で印刷したす。



問題解決

たず、タスクでは、各道路に぀いお、その車の数を蚈算する必芁がありたす。 そしお、各道路のパラメヌタに応じお、枋滞の皋床を簡単に刀断できたす。

たた、Pythonでかなり単玔な実装が取埗されたす。

 import sys M = int(sys.stdin.readline()) LR = [] C = [0] * M for i in xrange(M): LR.append(map(int, sys.stdin.readline().split())) N = int(sys.stdin.readline()) for r in map(int, sys.stdin.readline().split()): C[r - 1] += 1 for i in xrange(M): print "Green" if C[i] < LR[i][0] else ("Red" if C[i] > LR[i][1] else "Orange")
      
      






All Articles