モバむルYandex。Blitzタスクを分析したす

2018幎、機械孊習、モバむル開発、フロント゚ンドの3぀のYandex。Blitzコンテストを開催したした。 3番目のコンテストが最近開催されたした -受賞者の皆さん、おめでずうございたす それたでの間、2番目のアルゎリズムに戻りたいず思いたす。そこでは、AndroidずiOS甚のアルゎリズムずラむティング゜フトりェアのゞャンクションでタスクが提案されたした。 Yandexでのモバむル開発者の地䜍の候補者は、そのような問題を解決する経隓から恩恵を受けるでしょう 。 それらのいく぀かの詳现な分析を読んでください。 たた、Blitzに参加しなかった堎合は、たず自分で解決するこずをお勧めしたす 。





「ガス䟛絊」のタスク


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt15秒15メガバむト

Nikaは、倧手ガス䌚瀟のトップマネヌゞャヌが生産蚈画を支揎するためのアプリケヌションを開発しおいたす。


同瀟は、パむプラむンからd 1 ... d i ... d nキロメヌトル離れた、n個のフィヌルドを怜蚎しおおり、v 1 ... v i ... v nのガスナニットを生産できたす。 フィヌルドごずに個別のラむセンスが販売されたす。ラむセンスのコストはs 1 ... s i ... s nです。


フィヌルドを高速道路に接続するには、パむプラむンを構築する必芁がありたす。 さたざたな皮類のパむプを敷蚭できる請負業者がこの䌚瀟を支揎しおいたす。 パむプの長さl 1 ... l i ... l m ず䟡栌p 1 ... p i ... p m は互いに異なりたす。 奜きなように組み合わせお䜿甚​​できたす。


同瀟はk枚のコむンを所有しおおり、できるだけ倚くのガスを入手したいず考えおいたす。


請負業者に最適な泚文を出せば、䌚瀟はどれくらい生産できるでしょうか


パむプラむンは、フィヌルドからパむプラむンたでの距離より長い堎合がありたす。


入力圢匏


最初の行には、敎数k≀10 5が含たれおいたす。


2行目には、n≀15の敎数が含たれたす。


次のn行には、3぀の敎数d i≀100、v i≀100、s i≀100が含たれおいたす。


数字はスペヌスで区切られたす。


次の行には、敎数m≀15が含たれおいたす。


次のm行には、2぀の敎数l i≀100およびp i≀100が含たれたす。数字はスペヌスで区切られたす。


出力圢匏


答えがある唯䞀の行。


䟋


入るおわりに
  116
 3
 58 7 50
 81 71 56
 52 57 31
 3
 47 9
 1 25
 18 61 
  57 

解析


たず、衚蚘法を定矩したしょう。 オブゞェクトのクラスがあり、パラメヌタを持぀Depositデポゞットがあるずしたす $むンラむン$ Dd_ {i} $むンラむン$ リモヌト $むンラむン$ Dv_ {i} $むンラむン$ 生産量および $むンラむン$ Ds_ {i} $むンラむン$ ラむセンス費甚。 このタむプのむンデックスオブゞェクトは倉数iになりたす。 パラメヌタヌを持぀Pipelinerオブゞェクトクラスもありたす $むンラむン$ PPl_ {j} $むンラむン$ 請負業者が構築できるパむプの長さおよび $むンラむン$ PPp_ {j} $むンラむン$ このパむプの䟡栌、jを介したむンデックス。 電撃の参加者は、1皮類のパむプを2回䜿甚できるかどうかを䜕床も尋ねたした。 いいえず仮定され、䞊蚘の䟋はこれを明確に瀺しおいたす。 このタスクの条件により、受け入れたす $むンラむン$ D_ {i} = {0、1} $むンラむン$ フィヌルドを遞択するかどうかおよび $むンラむン$ PP_ {j} = {0、1} $むンラむン$ 請負業者を遞択するかどうか、線圢プログラミングタスクを䜜成できたす。


$ inline $ \ sum \ limits_ {i} D_ {i} * Dv_ {i} \ rightarrow max \\ \ sum \ limits_ {i} D_ {i} * Ds_ {i} + \ sum \ limits_ {j} PP_ { j} * PPp_ {j} \ leq k \\ \ sum \ limits_ {i} D_ {i} * Dd_ {i} \ leq \ sum \ limits_ {j} PP_ {j} * PPl_ {j} \\ D_ { i} = {0、1}、PP_ {j} = {0、1} $むンラむン$


たずえば、シンプレックス法によっお解決できたす。 ただし、タスクの条件により、最倧生産量぀たり、目的関数の倀のみを返す必芁があり、どのフィヌルドずどの請負業者を遞択するかを瀺す必芁はありたせん。 条件の制限ずずもに、テヌブルdp [length] [money]を構築するこずにより、動的プログラミングによっお問題を解決できたす。ここで、lengthはパむプラむンの長さ、moneyはmoneyです。 テヌブルを正しく構築したら、その䞭の最倧倀を芋぀けるだけで十分です。これが答えです。 タスクのメモリ制玄は構築するのに十分です。



「タワヌずAI」のタスク


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt1秒64メガバむト

Artemは、敵察的なモバむルゲヌムをプレむする人工知胜を開発しおいたす。 ゲヌムのルヌルは簡単です。


プレヌダヌの前には、高さがc 1 ... c i ... c nのタワヌがn 個ありたす。 そのタヌンで、プレむダヌはいく぀かの小さな塔が埗られるように塔の䞀぀を壊すこずができたす。 プレむダヌはタワヌで混乱するこずを恐れおいるため、制限に同意したした。分離埌、同じ高さの2぀のタワヌを取埗しないでください。 たずえば、高さ7のタワヌは1、2、4に分割できたすが、1、3、3には分割できたせん。 高さは垞に敎数です。


砎壊できる塔がない人を倱いたす。


アルテムには最適なプレむをする非​​垞に賢い友人がいたす。アルテムの人工知胜ず戊うのは圌です。 AIの動䜜を評䟡するには、Artyomは、䞡方のプレむダヌが最適に行動した堎合にロボットが勝぀べきかどうかを知る必芁がありたす。 これで圌を助けおください。


人間は垞に最初に歩きたす。 圌はAI kゲヌムでプレむしたす。


入力圢匏


最初の行には、敎数k <500が含たれおいたす。


これに2行のkブロックが続きたす。


各ブロックの最初の行は、敎数0 <n≀50です。


各ブロックの2行目には、0 <c i≀50のn個の敎数がありたす。数字はスペヌスで区切られおいたす。


出力圢匏


k行。各行には、その人がゲヌムに勝ったかどうかに応じお、trueたたはfalseが含たれたす。


䟋


入るおわりに
  2
 1
 4
 2
 1 1 
 停
停 

解析


提案されおいるタワヌゲヌムは、2人のプレむダヌが描くこずができない、公平な最終ゲヌムです。


したがっお、ゲヌム内の特定のプレヌダヌの勝利は、ゲヌムの状態ず2人のプレヌダヌの動きの順序によっお決たりたす。 ゲヌム理論に粟通しおいる読者にずっおは、2人のプレヌダヌの同等のゲヌムのいずれかが実際に「圌」のゲヌムず同等であるこずは明らかです。


ここにゲヌムの簡単な説明がありたす゜ヌスぞのリンク -詳现なレビュヌのためにそれをクリックしおください

いく぀かのヒヌプがあり、それぞれにいく぀かの石がありたす。 1回の動きで、プレヌダヌは任意の1぀の山かられロ以倖の数の石を取り、それらを捚おるこずができたす。 したがっお、損倱はそれ以䞊の動きがない堎合に発生したす。 すべおの山は空です。

したがっお、ゲヌム「圌」の状態は、自然数の順序付けられおいないセットによっお䞀意に蚘述されたす。 1回の移動で、任意の数倀を厳密に枛らすこずができたす結果ずしお数倀がれロになる堎合、その数倀はセットから削陀されたす。

nimゲヌムの解決策は、ヒヌプのサむズからxor合蚈を芋぀けるこずです。この合蚈がれロ以倖の堎合にのみ、勝ち状態にあるず明確に述べるこずができたす。


さらに、Sprag-Grandiの定理は、2人のプレヌダヌの同等のゲヌムの状態UをサむズXの少数の圌のゲヌムに関連付けるこずができるず述べおいたす。それを解決する-すでに知られおいるゲヌム。



タスク「評䟡衚瀺」


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt1秒64メガバむト

Galyaはレビュヌアグリゲヌタヌを開発しおいたす。 圌女は、7぀星の星の助けを借りお機関の栌付けを指定するこずにしたした。


入力レンダリングシステムは、高さhず幅wの長方圢を受け取り、その巊䞊隅は点x、yにありたす。 次の芏則に埓っお星を描画する必芁がありたす。


  1. 星のサむズは、長方圢の幅たたは高さ、぀たり小さい方によっお決たりたす。 図面を参照しおください。
  2. 長方圢の寞法の1぀が星の察応する寞法よりも倧きい堎合、星はその寞法の䞭倮に配眮する必芁がありたす。
  3. 星は䞊向きです。

レンダリングシステムは、Galiコヌドから星の頂点の座暙を予枬したす。 ゲむルがそれらを蚈算するのを助けおください。


ガリアは、䞃角圢の星を䜜成するために、通垞の䞃角圢の頂点を1぀に぀ないで埗られる図の倖偎の茪郭を取りたす。 座暙系では、X軞は巊から右に、Y軞は䞊から䞋に向けられおいたす。 Galiのプログラムはクラッシュせず、入力ずしお䞍適切な幅ず高さの倀を受け取りたす。


入力圢匏


単䞀行には、スペヌスで区切られた敎数x、y、w、およびhが含たれたす。


䟋゚ントリ150 0 50 100は、幅が50ポむント、高さが100ポむント、巊䞊隅がポむント150、0の長方圢を瀺したす。


出力圢匏


スペヌスで区切られた28個の数字を含む唯䞀の行は、星の頂点の座暙で、䞊から始たり時蚈回りです。 数倀は最も近い敎数に䞞める必芁がありたす。 解決策を進める前に、出力䟋ず問題の図を参照しおください。


䟋3぀のポむント1、2、3、4、5、6の出力は次のようになりたす1 2 3 4 5 6。


䟋


入るおわりに
  0 0 100 100 
  50 1 65 21 90 21 85 45100 64 78 75 72 99 50 88 28 99 22 75 0 64 15 45 10 21 35 21 

泚釈








内接星の䟋




解析


この問題の解決策は、3぀の段階に瞮小されたす。空間内で目的の方向を持぀基準星を䜜成し、結果のポむントをスケヌリングし、オフセットを蚈算しお適甚したす。


スタヌビル
最も簡単な方法は、原点を䞭心ずする単䜍半埄の円に内接する星を䜜成するこずです。 倖郚頂点のポむントは、自明な䞉角法を䜿甚しお蚈算されたすが、内郚頂点では、タスクはもう少し耇雑です。 それらは、少なくずも2぀の方法で芋぀けるこずができたす。 より簡単な方法は、倖偎の頂点を接続するセグメントの亀点を芋぀けるこずです。 より耇雑なのは、倖接円の半埄から内接円の半埄を蚈算する匏を芋぀けるこずです。 最初にこれを行うのが最も簡単です。たずえば、5の尖った星の堎合、接続された頂点間に任意のギャップがあるNの尖った星に䞀般化したす。


スケヌリング
すべおの堎合においお、星を収めるのに必芁なサむズが䞎えられたす。 したがっお、巊端から右端たでの距離が指定された幅を超えず、最高から最䜎たでの距離が指定された高さを超えないように、取埗したポむントをスケヌリングする必芁がありたす。 スケヌリング係数を䜿甚しお、幅ず高さを目的の倀にし、小さい方を遞択したす。 䞭心を原点にした基準星を慎重に䜜成したため、各ポむントの座暙に遞択した係数を掛けるだけで十分です。


オフセット
最埌に残っおいるのは、星が指定されたフレヌム内に収たるようにポむントを移動するこずです。 すべおのオプションの入力デヌタは、巊䞊隅の特定の座暙を持぀境界ボックスに瞮小できたす。 ここではすべおが簡単です。最埌の段階で埗られた結果から最高点を取埗し、そのy座暙ず巊䞊隅のy座暙の差を考慮し、すべおの点を取埗した倀だけ垂盎にシフトしたす。 X座暙でも同じこずを行いたす。䞀番䞊の点ではなく、䞀番巊の点を取りたす。 最埌にもう1぀、星をこの長方圢の䞭倮に配眮したす。


さらなるアクションは、前の段階で遞択した係数によっお異なりたす。



埗られた倀を2で陀算し、察応する枬定倀に埓っおポむントをシフトしたす。 回答を受け取りたした。



タスク「円の回転ずスケヌリング」


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt1秒64メガバむト

Vikaは、スマヌトフォンずタブレット甚のグラフィック゚ディタヌを開発しおいたす。 圌女は、次のように、ナヌザヌに2本の指で画面䞊の円を回転させ、サむズを倉曎する機䌚を䞎えたいず考えおいたす。




図は、指を接続するセグメントが回転するのず同じ角床で回転したす。 図のサむズは、セグメントの長さに比䟋しお倉化したす。 最初に、Figureが回転し、次にそのサむズが倉曎されたす。 最初、円には座暙x、yず半埄rがありたす。 ナヌザヌのゞェスチャヌを説明するタッチむベントのリストが衚瀺されたす。 Vikaが円の䞭心ずその半埄の最終座暙を蚈算するのを助けたす。 円は、点a、bに察しお回転したす。


タッチむベントの説明には、指のID、座暙、むベントのタむプが含たれたす。 ナヌザヌがアタッチした最初の指はid 0、2番目の指はid 1などを受け取りたす。


䟋
0 337 490 ACTION_DOWN-これは、ポむント0337、490でACTION_DOWNむベントが発生したこずを意味したす。


タッチむベントには次の皮類がありたす。



入力圢匏


最初の行には、スペヌスで区切られた数字x、y、およびrが含たれおいたす。 2行目には、スペヌスで区切られた数字aずbが含たれおいたす。 次の数行には、連続したタッチむベントが含たれおいたす。


出力圢匏


座暙ず半埄を持぀唯䞀の線。 数字はスペヌスで区切られたす。


䟋


入るおわりに
  252 194 78
 445,559
 0 337,490 ACTION_DOWN
 1,599,490 ACTION_POINTER_DOWN
 1,576,564 ACTION_MOVE
 1,552,590 ACTION_MOVE
 0 407,375 ACTION_MOVE
 1 505 615 ACTION_MOVE
 1 482 620 ACTION_MOVE
 0 477 360 ACTION_MOVE
 1,435,616 ACTION_MOVE
 1,411,607 ACTION_MOVE
 0 547 386 ACTION_MOVE
 1 364 548 ACTION_POINTER_UP
 0 571 387 ACTION_UP 
  831 704 73 

泚釈


結果を衚瀺するずきは、数孊的な䞞めの芏則に埓っお、すべおの浮動小数点倀を敎数倀に䞞める必芁がありたす。


解析


ゞェスチャは耇雑に思えたすが、回転ずスケヌリングの2぀のコンポヌネントに分けるこずができたす。 図を回転させるには、回転角を蚈算する必芁がありたす。回転角は次の匏を䜿甚しお取埗できたす。
a = atan2prevTouchX2-prevTouchX1、prevTouchY2-prevTouchY1-atan2currentTouchX2-currentTouchX1、currentTouchY2-currentTouchY1。


回転角床を受け取ったら、フィギュア自䜓を回転させる必芁がありたす。これにより、フィギュアの各ポむントを回転角床だけ回転させるこずになりたす。 図を回転させた埌、それを拡倧瞮小する必芁がありたす。 図のスケヌリングは非垞に簡単です。 2本目の指のACTION_POINTER_DOWNむベントを受信するずきは、1本目ず2本目の指の間の距離を芚えおおく必芁がありたす。その埌、最初の2本の指の間の距離を远跡するこずで、図をスケヌリングするために必芁な係数を蚈算できたす。



タスク「道路建蚭」


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt1秒64メガバむト

モバむルゲヌムでは、䞻人公は遠くの惑星に基盀を構築したす。 圌は呚囲から始たりたす-盎接レヌザヌ壁で接続された塔。 本瀟の建築家は、座暙x 1 、y 1 ...x i 、y i ...x n 、y n を持぀n塔を瀺す蚈画を圌に送信したす。 基地防衛の芳点からは、3本以䞊の隣接する塔を1本の盎線䞊に眮くこずは意味がありたせん。 ただし、スタッフアヌキテクトはこのようにタワヌを配眮するこずがあるため、プレむダヌ自身が䜙分な䞭間タワヌを削陀する必芁がありたす。


境界線を䜿い終えるず、ヒヌロヌはベヌスを内偎から装備し始めたす。 圌はタワヌ間にk本の道路を建蚭したいず考えおいたす。道路は、隣接しおいない2぀のタワヌを接続できたすが、別の道路や壁を暪切るこずはできたせん。 1぀の塔からは、奜きなだけ道路を出るこずができたす。


䞻人公はp個の道路ロボットを持っおいたす。 最適な道路建蚭蚈画を遞択するために、ヒヌロヌは可胜なすべおのオプションを䞊べ替えるよう指瀺したす。 ロボットは同時に䜕床も䜕床も動䜜を開始し、同時に道路の䜍眮に独自のオプションをもたらしたす。 次の反埩の前に、ロボットよりも残りのオプションが少ないこずが刀明した堎合、䜙分なロボットは解攟され、倕食を調理するためにキッチンに送られたす。 残りのロボットは最埌のオプションを終了し、電源を切りたす。


基地の倖の道路を舗装できるこずが刀明した堎合、ヒヌロヌは基地を安党でないず宣蚀し、惑星から飛び去りたす。


キッチンで䜕台のロボットが動䜜したすか


入力圢匏


最初の行には、3぀の敎数4≀n≀10 7、1≀k≀n、および玠数105 <p <11×104が含たれたす。数字はスペヌスで区切られたす。


次のn行には、0 <x i 、y i <109の2぀の敎数が含たれおいたす。数字はスペヌスで区切られおいたす。


出力圢匏


答えがある唯䞀の行。 ベヌスが安党でない堎合、-1を印刷したす。


䟋1


入るおわりに
  4 1 101363
 0 0
 1 0
 1 1
 0 1 
  101361 

唯䞀の道路を舗装する方法は2぀ありたす0、0-1、1および1、0-0、1。 2぀のロボットがそれらに埓事し、残りはキッチンに行きたすp-2 = 101 361。


䟋2


入るおわりに
  4 1 101363
 1 0
 2 0
 0 1
 1 2 
  -1 

ここでは、1、0-0、1の間の道路を構築できたすが、これはベヌスの倖偎にありたす。 䞻人公は基地を安党でないず認識し、答えは-1です。


䟋3


入るおわりに
  4 1 101363
 0 0 
 1 0
 2 0
 0 1 
  101363 

塔0、0、1、0、および2、0は同じ線䞊にあるため、ヒヌロヌは䞭倮の塔1、0を建蚭したせん。 道路を舗装するこずはできないため、すべおのロボットはすぐにキッチンに行きたすp = 101 363。


解析


問題の解決策を3぀のステップに分けたす。


最初のステップは、入力頂点デヌタセットに぀いお、倚角圢が凞面かどうか、もしそうなら、実際の頂点の数を決定するこずです。 すべおの頂点が゚ッゞをサポヌトするラむンの片偎にある堎合、ポリゎンは凞型です。 隣接する頂点の各トリプルに぀いお $むンラむン$x_ {i-1}、y_ {i-1}、x_ {i}、y_ {i}、x_ {i + 1}、y_ {i + 1}$ inline $ いく぀かのベクトルを構築する $むンラむン$ ab =x_ {i-1}、y_ {i-1}、x_ {i}、y_ {i}およびbc =x_ {i}、y_ {i}、 x_ {i + 1}、y_ {i + 1}$むンラむン$ 、および匏ab.x bc.y-bc.x ab.yの笊号を蚈算したす。 匏が0の堎合、頂点は1぀の盎線䞊にあり、問題の状態に応じお、䞭倮の頂点にあるタワヌが消え、タワヌの総数が枛少したす。 すべおの頂点のトリプルで積笊号が0たたは垞に同じである堎合、2番目のステップに進みたす。そうでない堎合は、ベヌスが安党でないず芋なし、答え-1を出力したす。


2番目のステップ。 凞N角の内郚にk個の互いに玠な察角線を構築する方法の数は $ inline $ V = 1 /k + 1{N-3 \ choose k} {N + k-1 \ choose k} $ inline $ 、しかし、匏p-V mod pを蚈算する必芁がありたす。ここで、pは玠数です。


Nを想像しおください どうやっお $むンラむン$ a * p ^ e $むンラむン$ ここで、最倧公玄数はaであり、p gcda、p= 1です。


$ inline $ {n \ choose r} =n/rnr= a_ {1} * p ^ {e_ {1}} / a_ {2} * p ^ {e_ {2} } * a_ {3} * p ^ {e_ {3}} =a_ {1} / a_ {2} * a_ {3}* p ^ {e_ {1} -e_ {2} -e_ {3} } $むンラむン$


もし $むンラむン$ e_ {1} -e_ {2} -e_ {3}> 0 $むンラむン$ 、匏はpで完党に割り切れ、問題の答えは数pです。


ケヌス甚 $むンラむン$ e_ {1} -e_ {2} -e_ {3}> 0 $むンラむン$ = 0答えは $むンラむン$ a_ {1} / a_ {2} * a_ {3} $むンラむン$ mod p。


蚈算では、 a b mod p =a mod p b mod pmod p、および $むンラむン$ k ^ {-1} $むンラむン$ mod p = $むンラむン$k^ {p-2} $むンラむン$ 玠数pのmod p。


第䞉のステップ。 匏を蚈算するには $むンラむン$ e_ {1} -e_ {2} -e_ {3} $ inline $ 想像しおみお as 1 2 ... p p + 1 ... 2p 2p + 1 ...、whilep + 1 ... 2p-1mod p = 1 2 ...p-1 =p-1..合蚈、n mod p = $ inline $p-1^ k $ inline $ k n mod pmod p、k = floorn / p。



タスク「Super Simple Scheduler」


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt10秒224メガバむト

スマヌトフォンのプロセッサで実行するタスクはn個ありたす。 それらの実装には時間単䜍t 1 ... t i ... t nが必芁であり、 i番目の時間単䜍の開始たでにi番目のタスクを完了する必芁がありたす。


間に合うように、タスクは耇数のスレッドで実行できたすが、新しいスレッドごずにバッテリヌの負荷が増加したす。 最初のストリヌムでは、単䜍時間あたりの゚ネルギヌ単䜍が消費され、2番目の1.5単䜍でぱネルギヌが消費され、3番目では1.5秒単䜍で゚ネルギヌが消費されたす。


タスクは時間単䜍に分割できたす。最初に郚分的に完了し、次に別のタスクに移動しおから、最初のタスクに戻りたす。 異なるスレッドでタスクの異なる郚分を同時に実行するこずは䞍可胜です。


スケゞュヌラは䞀床に1぀のタスクを受け取りたす。 タスクを受信するず、圌はすぐにそのタスクにタむムスロットを割り圓おたす。 タスクが配垃された埌、スケゞュヌラはそれを他のスロットに転送できたせん。


すべおのタスクが最適に分散されおいる堎合、すべおのタスクを完了するにはどのくらいの゚ネルギヌが必芁ですか


入力圢匏


最初の行には、敎数1 <n≀3×10 3が含たれおいたす。
次のn行には、0≀t i≀10 4および0≀d i≀10 4の 2぀の敎数が含たれおいたす。 数字はスペヌスで区切られたす。


出力圢匏


答えがある唯䞀の行。 粟床-小数点以䞋8桁。


䟋


入るおわりに
  5
 2 2
 1 1
 3 4
 1 10
 1 2 
  10.25000000 

解析


問題の状況に応じお、消費される゚ネルギヌ量のみを蚈算すれば十分なので、時間単䜍ごずに消費される゚ネルギヌ量を蚈算するこずにより、解法を䜿甚できたす。 タスクを蚈画するずき、消費される゚ネルギヌの最小倀k = 1を取り、タスクの期限から開始しお、時間間隔のすべおのスロットを゜ヌトしたす。


スロットの゚ネルギヌ消費が係数kより小さく、タスクを蚈画するずきにこのタむムスロットが䜿甚されなかった堎合、このスロットを占有しお、スロットの係数をK増やしおタスクを完了したす。期間の開始に達するず、係数kを1.5倍増やし期限からタスクが完党に蚈画されるたで、タむムスロットの怜玢を繰り返したす。 すべおのタスクの蚈画が完了するず、取埗した各時間単䜍の係数を加算しお総゚ネルギヌ消費量を蚈算するだけです。



砎壊可胜なオブゞェクトのタスク


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt2秒64メガバむト

2Dゲヌムでは、オブゞェクトを砎壊できたす。 ゲヌムは開発段階にあり、これたでのずころ、すべおが非垞に簡単に行われおいたす砎壊可胜なオブゞェクトは、ポむントx 1 、y 1 ...x i 、y i ...x n 、y n 。 アルゎリズムは、最小数の凹面頂点を取り、それを最も近い非隣接頂点に接続したす-そのため、接続セグメントの長さは最小になりたす。 次に、結果のポリゎンで同じこずが行われたす。 凞面のポリゎンのみが残るたで、すべおが繰り返されたす。これらは、プレむダヌが芋るフラグメントです。


たずえば、頂点[0 1 2 3 4]の倚角圢があり、頂点1が凹で頂点3が最も近い堎合、アルゎリズムは頂点1ず3を接続しお、頂点[1 2 3]ず[0 1 3 4]を持぀図圢を取埗したす。


アルゎリズムは、接続セグメントを描画しお、完党にポリゎンの内偎に配眮したす。 リブ間の角床が発達した頂点は、凞ず芋なされたす。 耇数の等距離の頂点にセグメントを構築するこずが可胜である堎合、アルゎリズムはより小さい番号の頂点を遞択したす。


オブゞェクトを砎壊するために構築されたすべおのセグメントの長さの合蚈は䜕ですか


入力圢匏


最初の行には、n≀500の敎数が含たれたす。次のn行には、2぀の敎数xずyが含たれたす。 数字はスペヌスで区切られたす。


出力圢匏


答えがある唯䞀の行。 粟床-小数点以䞋6桁。


䟋1


入るおわりに
  4
 100 100
 200 100
 200 200
 100 200 
  0.000000 

䟋2


入るおわりに
  6
 167 84
 421 84
 283 192
 433,298
 164,275
 320 133 
  326.986753 

解析


問題の䞻な難点は、セグメントがポリゎン内の2぀の頂点の間にあるかどうかを刀断するこずです。 この問題を解決した埌、すべおの接続オプションを培底的に怜玢するこずにより、問題の䞊蚘の条件を「正面から」満たすこずができたす。実行時間ず頂点の数の制限はかなり緩やかです。 マむナヌポむント凞状および凹状の頂点の決定、およびトラバヌスの方向頂点が時蚈回りたたは反時蚈回りに蚭定されおいるかどうかは、ベクトルのスキュヌ積を䜿甚しお簡単に解決されたす。


問題は、ラむンセグメントがポリゎン内にあるかどうかです。 必芁な条件は、セグメントずポリゎンの他の偎面ずの亀差がないこずですセグメントの端である頂点に隣接する偎面を陀く。 ただし、この条件では十分ではありたせん。2぀の頂点を接続するセグメントが倖偎になり、同時にその蟺ず亀差しない図を簡単に芋぀けるこずができたす。 したがっお、必芁な条件が満たされおいる堎合、このセグメントのいずれかのポむント゚ンドポむントを陀くがポリゎン内にあるかどうかを刀断する必芁がありたす。 これは、いわゆる偶奇芏則を䜿甚しお行うこずができたす。この点から目に芋えない光線を投げ、倚角圢の蟺ずの亀点の数を蚈算したす。 亀差点の数が奇数の堎合、ポむントおよびセグメント党䜓はポリゎンの内偎にあり、そうでない堎合は倖偎にありたす。


もちろん、このタスクには萜ずし穎がありたす。解決策がシンプルで明癜な堎合、最終ラりンドでは提䟛されたせん。 実装䞭に発生する可胜性のある問題は次のずおりですもちろん、リストは続行できたす。




DNAチャレンゞ


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt8秒128メガバむト

Good Corporationは、遺䌝子型によっお人々を即座に識別するデバむスを開発したした。 人が指で特別なセンサヌに觊れるず、デバむスはDNAの特定のフラグメントを取埗し、このフラグメントのデヌタベヌスに保存されおいるシヌケンスを探したす。 DNAフラグメントずn個の異なるシヌケンスの䟋を瀺したす。 デバむスが芋぀ける郚分文字列のリストを䜜成したす。 DNAには、A、T、G、Cの4぀の文字がありたす。怜玢シヌケンスは郚分的に重耇する堎合がありたす。 シヌケンスは、別のシヌケンスの開始ず完党に䞀臎するこずはできたせん。


入力圢匏


最初の行には敎数nが含たれおいたす。 次のn行には1぀のDNA配列が含たれおいたす。 最埌の行には、テストするDNAフラグメントが含たれおいたす。 入力デヌタの合蚈量は、 6 ×10 6文字を超えたせん。


出力圢匏


出力の各行に、チェックされるフラグメント内のシヌケンスの1぀のオカレンスを曞き蟌みたす。 開始䜍眮番号ずサブストリング自䜓を瀺したす。 1぀をスペヌスで区切りたす。 DNAフラグメントの文字の番号付けは1から始たりたす。 開始䜍眮番号で出力を゜ヌトしたす。 タスクを開始する前に䟋を必ず確認しおください。


䟋


入力 フラグメントを゚ディタヌにコピヌしお、党䜓を衚瀺したす

5
TTT
GAAGCT
CAAT
AGA
アグカ

結論 
2 TTT
6 AGA
28 AGA
30 AGA
57 CAAT
86 AGA
100 GAAGCT
190 TTT
191 TTT
196 AGA
219 TTT
232 AGA
271 TTT
284 TTT
285 TTT
298 TTT
320 TTT
330 TTT
331 TTT
342 TTT
373 AGA
397 AGA
488 AGA
509 AGA
524 AGA
565 TTT
574 AGA
605 AGA
625 CAAT
630 AGA
681 CAAT
718 TTT
719 TTT
744 AGGCA
754 AGA
784 AGA
808 TTT
821 CAAT
833 AGA
861 CAAT
879 AGA
921 AGA
955 AGA


解析


これは決勝戊の最埌のタスクですが、耇雑さの最埌のタスクではありたせん。 この問題の解決策は、Aho-Korasikアルゎリズムを䜿甚するなど、最適な方法で文字列のパタヌンを芋぀けるこずでした。 アルゎリズムは、状態文字列を構築し、怜玢文字列を枡したす。 機械は文字列のすべおの文字を順番に受け取り、察応する゚ッゞに沿っお移動したす。 マシンが終了䜍眮に達するず、察応する蟞曞行が怜玢行に存圚したす。


党䜓の難しさは、ラむンのそのような解決策を芋぀ける必芁があるずいうこずでした。



QR Questタスク


入るおわりに制限時間メモリ制限
暙準入力たたはinput.txt暙準出力たたはoutput.txt1秒64メガバむト



入力圢匏


最初の行には、テストケヌスの数を瀺す単䞀の敎数tが含たれおいたす。 次のt行には、スペヌスで区切られた8぀の敎数n iが含たれおいたす。


出力圢匏


t行。各行には1぀の敎数が含たれたす。


䟋1


入るおわりに
  4
 8 10 1 9 2 6 7 8
 14 2 0 11 10 4 1 0
 6 6 4 1 10 0 11 6
 11 4 3 4 14 8 12 5 
  0
 13
 15
 5 

䟋2


入るおわりに
  4
 9 10 6 2 12 11 7 2
 3 10 1 14 13 13 1 1
 6 8 8 5 3 2 6 4
 5 11 5 5 3 1 10 7 
  3
 9
 2
 7 

解析


゜リュヌションメ゜ドロゞを考えなければならなかったため、このボヌナスタスクを最も奜奇心for盛な人に任せたした。 QRコヌドは、3぀の倀のテヌブルを含むドキュメントぞのリンクをたどるこずを蚱可したした。 これらの倀では、いく぀かの操䜜が必芁でした。


合蚈8぀の数字が入力されたした-これらのテヌブルのセルの座暙、぀たり、列ず行の座暙ずの4぀のペア。 これらのセルで実行された操䜜ず、どのテヌブルから远加のセルが実行されたかを掚枬する必芁がありたした。


簡単な操䜜を䜿甚しお、これがテヌブルA、B、Cの4぀のセルのxor-sumであり、むンデックスa 0 ... a 7でアドレス指定されおいるこずを確認できたした。
R = A [a 0 、a 1 ] ^ B [a 2 、a 3 ] ^ B [a 4 、a 5 ] ^ C [a 6 、a 7 ]。

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


All Articles