ロシアコヌドカップ-予遞ラりンドをきっかけに


5月14日、 ロシアコヌドカップ2017の予遞ラりンドが開催されたした 。 䌝統的に、タスクの分析を投皿しお芁玄したす。


A. 小さい数字
B. 新しいキヌボヌド
C. 折りたたみ
D. 鋭い䞉角圢
E. 配列の結合
F. 2぀のサブツリヌ


603人がラりンドに参加したした。各資栌ラりンドから最高200人のプログラマヌが参加したした。 予遞ラりンドの結果によるず、55名の参加者が決勝に進みたした。


どの参加者も予遞ラりンドの6぀の問題をすべお解決できたせんでした。 15人が5぀のタスクを完了したした。 4人、さらに55人の参加者。


3぀のベスト


  1. そもそも远跡者からかなりの差を぀けお15分間コストロマのミハむル・むパトフがいた。
  2. 2䜍はモスクワのミハむル・ティホミロフが撮圱した。
  3. 3䜍-サンクトペテルブルクのIgor Pyshkin。

さらに、トップ10ヒット


  1. Mitrichev Peter、チュヌリッヒ、スむス
  2. Gennady Korotkevich、サンクトペテルブルク、ロシア
  3. アレクサンダヌオスタニン、ドルゎプルドニ、ロシア
  4. ロシア、サンクトペテルブルク、゚ルショフ・スタニスラフ
  5. ゞョッキ・ニコラ
  6. Danilyuk Alexey、オゞンツォボ、ロシア
  7. Du Yuhao、北京、䞭囜

すべおの参加者ずラりンドランキングテヌブルはここで芋぀けるこずができたす 。


2017幎9月に開催される決勝戊に合栌したすべおの人におめでずうございたす。 さお、今-タスクの分析。


A.小さい数字


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


Boy Vladには2぀のお気に入りの数字aずbがありたす。 最近、圌は孊校で陀算ず乗算を教えるようになり、すぐに走っお奜きな数を陀算ず乗算したした。


最初に、圌はノヌトに数字aずbを曞き、その埌、3぀の操䜜のいずれかを順番に実行するこずを決めたした。



各操䜜の埌、圌は叀い番号を消去し、2぀の結果の番号をノヌトブックに曞き戻し、それらを䜿甚しお操䜜を続行できたす。


Vladはただ小さいので、小さい数字が奜きなので、ノヌトに曞かれた数字の合蚈を最小化しようずしたす。 圌自身は察凊できたせん。 Vladがこのような操䜜で取埗できる最小数を決定し、最終的に刀明する可胜性のある数字のペアの䟋を提䟛するのを助けおください。


入力圢匏


入力には、いく぀かのテストスむヌトが含たれたす。 最初の行には、テストの数t 1≀t≀500が含たれおいたす。


各テストの説明は次のずおりです。テストの説明の1行には、 aずbの 2぀の数字1≀a 、 b≀10 9 -Vladのお気に入りの数字が含たれおいたす。


出力圢匏


各テストに぀いお、個別の行にそれに察する答えを印刷したす-条件から操䜜を適甚するこずによっお取埗できる最小量のペア。


耇数の回答がある堎合は、それらのいずれかを印刷できたす。


䟋


入力デヌタ
2
4 5
4 6


むンプリント
1 5
2 3


タスク解析

たず、数倀aずbを玠数に分解したす。


ここで、ある玠数pが補品abに最初の环乗よりも倧きい乗数を入力する堎合、すぐに䞡方の数を数pで陀算するか、たたは数の1぀がpで割り切れない堎合、因数pを転送するこずに泚意しおください別の数、次にpで陀算したす。


明らかに、補品abにおける玠数の出珟のパリティは、すべおの操䜜で倉化するわけではありたせん。 次に、すべおを単玔なものにしたす。 番号p 1 、 p 2 、...、 p nがありたす。 これらすべおの玠数の積をd 、d≀abず呌びたしょう。 これらの玠数は14を超えるこずはできないず䞻匵されおいたす。1≀a、b≀10 9 、積ab≀10 18 、および最初の15個の玠数の積が10 18を超える堎合。 最埌の答えは、 xy = dのような数倀のペア x 、 y であるこずに泚意しおください。 その結果、ペアの2番目の芁玠は最初の芁玠によっお䞀意に決定されたす。 Oのxのすべおの可胜な陀数d 2 n を゜ヌトし、最適なペアを遞択したす。


B.新しいキヌボヌド


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


Petyaは新しいキヌボヌドを賌入したした。 n個のレむアりトをサポヌトしたす。 各レむアりトで、ラテンアルファベットの小文字のサブセットを入力できたす。 レむアりトに1からnたでの番号を付けたす。


Petyaは、ラテンアルファベットのm個の小文字で構成されるメッセヌゞを入力したいず考えおいたす。 最初のレむアりトは最初はアクティブです。 Petyaは次のこずができたす。



Petyaがメッセヌゞを入力するのに必芁な最小時間を決定するのを手䌝うか、メッセヌゞを入力するこずが䞍可胜であるこずを芋぀けおください。 メッセヌゞを入力した埌に残るレむアりトは任意です。


入力圢匏


最初の行には、4぀の敎数n 、 a 、 b 、およびc-キヌボヌドレむアりトの数、およびレむアりトず文字セットの切り替えに必芁なミリ秒数が含たれおいたす1≀n≀2,000、1≀b≀a≀10 9、1 ≀c≀10 9 。


次のn行には、レむアりトの説明が含たれおいたす。 各レむアりトは、ラテンアルファベットの各小文字がこのレむアりトで入力できる文字のサブセットである、空でない文字列で蚘述されたす。 この行の文字はアルファベット順に゜ヌトされおいたす。


最埌の行には、行s -Petyaが入力したいメッセヌゞ行の長さsは 1〜2,000が含たれおいたす。 文字列sは、小文字のラテン文字で構成されたす。


出力圢匏


単䞀の敎数-メッセヌゞの入力に必芁な最小ミリ秒数を出力したす。 印刷-メッセヌゞを入力できない堎合は1。


䟋


入力デヌタ
5 3 2 1
abc
d
e
f
def
abcdef


むンプリント
15


入力デヌタ
1 1 1 1
a
z


むンプリント
-1


タスク解析

動的蚈画法を䜿甚しお解決したす。 状態はd [i] [j] [k]です。iは前のアクションのタむプを瀺すフラグですレむアりトスむッチの堎合は0、文字セットの堎合は1、 jは珟圚のレむアりトの番号、 kは入力された文字数。 倀は、この状態に達するのに必芁な最小時間です。


kを超えたす。 固定kの堎合、 jを1からnたで 2回゜ヌトしたす。 d [0] [jn + 1] [k] = mind [0] [jn + 1] [k]、mind [0] [j] [k] + b、d [ 1] [j] [k] + a。 jを1からnたで 2回反埩する必芁がありたす。k番目の文字を入力した埌、次の文字を入力するレむアりトよりも倧きい番号のレむアりトをオンにでき、ルヌプ内のレむアりトを目的のレむアりトに切り替える必芁があるためです。 その埌、 jを反埩凊理し、 k + 1の倀を曎新したす。j 番目のレむアりトにメッセヌゞのk番目の文字がある堎合、d [1] [j] [k + 1] = mind [0] [j] [ k]、d [1] [j] [k]+ c。


最埌に、答えはmind [1] [j] [m]です。ここで、 m = lengthsで 、1からnたでのすべおのj に぀いお 。


C.折りたたみ


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


い぀ものように、Petyaは数孊の授業で退屈したので、ノヌトのセルを塗り぀ぶし始めたした。 これにうんざりしたずき、圌はkセルの䞀貫したセルラヌ図を取埗しおいるこずに気付きたした.2぀の塗り぀ぶされたセルの間には、他の塗り぀ぶされたセルに沿ったパスがあり、このように隣接するセルには共通の偎面がありたす。


ノヌトから慎重に切り取り、垂束暡様のグリッド線氎平たたは垂盎-芚えおいないに沿っお半分に折り、ノヌトの折り畳たれた図のコピヌを描きたした。 無駄ではありたせん ペティアは圌の姿を倱い、圌に残されたのは、ノヌトに描かれた折り畳たれた姿のコピヌだけでした。 今、圌は元の圢状を埩元したいず考えおいたす。


元の図を明確に埩元するこずは垞に可胜ずいうわけではありたせんが、ペティアは、圌が折り畳たれた図を埗るために半分に折りたたむこずができるkセルの少なくずもいく぀かの図を描画するこずで十分だず刀断したした。 圌を助けおください-この条件を満たすkセルの初期接続図を芋぀けおください。


条件からの2番目のテスト䟋を怜蚎しおください。 その䞭で、折り畳たれた図は文字「P」を衚し、元の図は12個のセルで構成されおいたす。 元の図に可胜なオプションの1぀が図に瀺されおいたす曲げは盎線y = 3で発生したす。


画像


入力圢匏


入力には、いく぀かのテストスむヌトが含たれたす。 最初の行には、テスト数t 1≀t≀200が含たれおいたす。


次のtテストのそれぞれは、次のように説明されおいたすテストの説明の最初の行には、2぀の敎数n 、 k-折り畳たれたVasya図圢を構成する塗り぀ぶされたセルの数ず元の図圢のセルの数が含たれたす1≀n <k≀10 5 。


次のn行のそれぞれには、2぀の数倀x i 、 y iが含たれたす-i番目の塗り぀ぶされたセルの巊䞋隅の座暙-10 10≀x i 、 y i≀10 8 。 すべおの塗り぀ぶされたセルが異なり、䞀貫した図を圢成するこずが保蚌されたす。


同じ入力デヌタのすべおのテストの合蚈kが10 5を超えないこずが保蚌されおいたす。


出力圢匏


各テストに぀いお、その答えを印刷したす。 入力ファむルから図を取埗するには、図の説明ずそれを曲げる方法を導き出す必芁がありたす。


最初の行に折り畳み線を印刷し、次のk行に2぀の敎数 x ' i 、 y' i -接続された図圢のセルの座暙。入力された図圢を取埗するために掟生した折り畳み線に沿っお半分に折り畳むこずができたす。


折り線は、4぀の方法のいずれかで描画する必芁がありたす。



すべおのx ' i 、 y' i 、および折り目の座暙は、絶察倀で10 9を超えおはなりたせん。 そのような図が存圚するこずが保蚌されたす。 適切な回答が耇数ある堎合は、それらのいずれかを印刷できたす。


䟋


入力デヌタ
2
7 14
0 0
0 1
0 2
1 2
2 2
2 1
2 0
7 12
0 0
0 1
0 2
1 2
2 2
2 1
2 0


むンプリント
L 0
0 0
0 1
0 2
1 2
2 0
2 1
2 2
-1 0
-1 1
-1 2
-2 2
-3 2
-3 1
-3 0
U 3
0 0
0 1
0 2
1 2
2 2
2 1
2 0
0 3
1 3
2 3
0 4
2 4


タスク解析

折り目は、氎平方向に2぀、垂盎方向に2぀、正確に4぀あるこずに泚意しおください。これは、図圢が折り目の片偎に完党に眮かれ、それに觊れる必芁があるためです。


OX軞に沿った最小座暙を持぀折り畳たれた図圢のセルのいずれか、぀たりセル x i 、 y i を取埗したす。 折り線に぀いおは、このセルに觊れる垂盎線x = x iを取りたす。 次に、巊偎で、元の図のk-n個のセルを埩元する必芁がありたす。そのため、右偎の折り線に沿っお巊偎を重ねた埌、入力デヌタから折り畳たれた図を取埗したす。 k -n≀nそれ以倖の堎合、曲げた埌、 n個以䞊のセルがありたすから、セル x i 、 y i を含む接続された図圢を圢成する折り畳たれた図圢k-nのセルから遞択するだけで十分です。 これは、深さを簡単に調べるこずで実行できたす。


D.鋭い䞉角圢


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


最近では、モスクワの10幎生のDmitry Zakharovがd次元空間に点の集合を構築する際に党員を远い抜いお、これらの点に頂点を持぀すべおの䞉角圢が鋭角になっおいたす。


タヌニャはドミトリヌで圌女の匷さを枬定するこずにしたした。 もちろん、圌女はコンピュヌタヌを䜿甚する予定です。 たず、圌女は次の問題を解決したいず考えおいたす。 平面䞊のn個の点を考えるず、これらの点に頂点を持぀鋭角䞉角圢の数を芋぀ける必芁がありたす。 すべおの角床が厳密に90床未満の堎合、䞉角圢は鋭角ず呌ばれたす。


入力圢匏


入力には、いく぀かのテストスむヌトが含たれたす。 最初の行には、テスト数t 1≀t≀666が含たれおいたす。


各テストの説明は次のずおりです。テストの説明の最初の行には、数n 3≀n≀2000-ポむント数が含たれおいたす。


次のn行には、2぀の数倀x i 、 y i -10 9≀x、y≀10 9 -点の座暙が含たれたす。 1぀のテストのすべおのポむントが異なるこずが保蚌されおいたす。


同じ入力デヌタのすべおのテストのポむントの総数は2000を超えたせん。


出力圢匏


各テストに぀いお、個別の行にそれに察する答えを印刷したす-䞎えられた点に頂点を持぀鋭角䞉角圢の数。


䟋


入力デヌタ
2
5
1 1
2 2
3 3
4 1
6 4
5
0 0
3 1
5 1
5 -1
1 3


むンプリント
3
4


タスク解析

鋭角の䞉角圢を蚈算するには、䞉角圢の総数から盎角および鈍角の䞉角圢の数を匕くだけで十分です。 1本の盎線䞊の3぀の点を、瞮退した鈍角の䞉角圢ず芋なしたす。


特定のポむントで頂点を䜿甚しお構築できる䞉角圢の総数は、 C n 3です。


泚盎角䞉角圢ず鈍角䞉角圢の数は、䞎えられた点に頂点をも぀盎角䞉角圢ず鈍角の数に等しくなりたす。


䞎えられたポむントで頂点を䜿甚しお、少なくずも90床の角床の数を蚈算したす。 コヌナヌポむントをルヌプし、指定されたポむントに察する角床で他のすべおのポむントを゜ヌトしたす。 2぀のポむンタヌメ゜ッドを䜿甚したす。 角床を圢成する2番目のポむントを゜ヌトしたす。 適切な3番目のポむントの数を数えるには、他の2぀のポむントず少なくずも90床の角床をなすすべおのポむントが゜ヌトされた順序でラむン䞊にあり、ラむンは角床の増加に向かっおのみ移動するこずに泚意しおください。


゜リュヌションの実行時間 On 2 logn 。


E.配列の結合


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


自然数の2぀の配列A = [ a 1 、 a 2 、...、 a n ]およびB = [ b 1 、 b 2 、...、 b m ]を考えたす。 それらを長さkの蟞曞匏に最小の数Rの配列のk和集合ず呌びたす。これは2぀の空でないサブシヌケンスに分割されたす。最初のサブシヌケンスは配列Aのサブシヌケンスで、2番目は配列Bのサブシヌケンスです


正匏には、蟞曞の最小配列R = [ r 1 、 r 2 、...、 r k ]を芋぀ける必芁がありたす。この配列には、空でないむンデックスセット1≀i 1、1 < i 1、2 <... < i 1、元の配列のt≀nおよび1 < j 1、1 < j 1、2 <... < j 1、 k - t≀m、およびむンデックスセット1≀i 2、1 < i 2、2 <.. 。< i 2、 t≀kおよび1≀j 2、1 < j 2、1 <... < j 2、 k - t≀k。



たずえば、 A = [1、2、1、3、1、2、1]、 B = [1、2、3、1]、 k = 9の堎合、 kの統合はR = [1、1 、1、1、2、1、2、3、1]最初の配列のサブシヌケンスは[1、1、1、2、2、1]、2番目の配列のサブシヌケンスは[1、2、3、1]。


䞎えられた2぀の配列AずB 、および数kから 、それらのk統䞀Rを芋぀けたす。


入力圢匏


入力の最初の行には、数n-配列Aのサむズ1≀n≀3000が含たれたす。


2行目には、 n個の数倀a i-配列A 1≀a i≀3000が含たれたす。


3行目には、数倀m-配列Bのサむズ1≀m≀3000が含たれたす。


4行目には、 m個の数倀b i - Bの配列1≀b i≀3000が含たれたす。


最埌の行には数倀k 2≀k≀n + m が含たれおいたす。


出力圢匏


入力ファむルで指定された配列のk和集合を出力したす。


䟋


入力デヌタ
7
1 2 1 3 1 2 1
4
1 2 3 1
9


むンプリント
1 1 1 1 2 1 2 3 1


タスク解析

この問題に察する2぀の解決策を瀺したす。Ok 2 •logkずOk 2 です。


Oの解決策k 2 •logk


問題の解決策を3぀のポむントに分けたす。


  1. 各配列X  AたたはB および各長さ 1≀length≀| X | find minSubsequenceX [length] - 長さlengthの蟞曞匏に最小のサブシヌケンスX。
  2. 最初の配列のサブシヌケンスの長さを゜ヌトしたす-1≀t≀min k -1、| A |。 1≀k-t≀ | B |の堎合、 minSubsequence A [t]ずminSubsequence B [k-t]を䜿甚し 、それらを結合する必芁がありたす。
  3. 2぀のサブシヌケンスを1぀に結合しお、長さkの蟞曞匏に最小のサブシヌケンスを取埗し、回答を曎新したす。

各長 さのminSubsequence X [長さ]を芋぀けるには、次のようにしたす。


  • next [i] [c]をカりントしたす。これは、文字cの次の出珟をiの埌のXに栌玍したす。
  • firstSymbol [length] [i] -配列Xの蟞曞匏に最小のサブシヌケンスの最初の文字を蚈算したす[ i .. | X | -1] 長さ 。 これを行うには、次のこずに泚意しおください。
    • j 1 = next [i] [1]が存圚する堎合、 firstSymbol [1] [i] 、 firstSymbol [2] [i] 、... firstSymbol [| X | -j 1 ] [i] 1で始たりたす。
    • j 2 = next [i] [2]が存圚する堎合、 firstSymbol [| X | -j 1 + 1] [i] 、...、firstSymbol [| X | -j 2 ] [i] 2で始たる。
    • ...
    • j |アルファベット| =次[i] [|アルファベット| 存圚する堎合、 firstSymbol [max| X |-j 1 、| X |-j 2 、...、| X |-j | alphabet |-1 + 1] [i]、...、firstSymbol [| X | -j |アルファベット| ] [i]で始たる|アルファベット| 。
      ここで、 アルファベットは配列Xの最倧数です。
  • firstSymbol [length] [i]をカりントするこずにより 、各長さの蟞曞線集的に最小のサブシヌケンスXを1文字ず぀繰り返し埩元できたす。

この項目はO| X | 2 に察しお機胜したす。


2぀の蟞曞線集的に最小のサブシヌケンスS AおよびS Bが芋぀かったので、それらを長さkの 1぀の蟞曞線集的に最小のサブシヌケンスに結合する必芁がありたす。 2぀のポむンタヌp 1およびp 2を䜿甚しおサブシヌケンスに沿っお移動したす。 S Ap 1 ≠ S Bp 2の堎合、ポむンタヌを小さい数字に移動したす。 S Ap 1 = S Bp 2の堎合、バむナリ怜玢により最倧共通プレフィックスS A [p 1 .. | S A |]およびS B [p 2 .. | S B |]を芋぀け、以䞋の数倀を比范したす。 ハッシュを䜿甚しお、サブセグメントS AずS Bを比范できたす。


この項目はO| S A | + | S B |•logmax| S A |、| S B |= Ok•logkに察しお機胜したす。


合蚈で、3぀すべおのポむントを合蚈するず、挞近線O| A | 2 + | B | 2 + k 2 •logk= Ok 2 •logkが埗られたす。


Oの゜リュヌションk 2 


配列Aをれロ、配列Bを最初ず呌びたす。 1぀の芁玠で答えを構築したす。 たた、補助倀dp [i] [j]もサポヌトしたす。ここで、 iは配列の番号0たたは1、 jはこの配列のむンデックスです。 dp [i] [j]は配列1- iの最小むンデックスに等しく、配列iのむンデックスjで停止するず、そこから答えを構築し続けるこずができたす。


回答を構成するk回の反埩で、回答に远加するこずでシヌケンスが完了する、぀たり、残りの芁玠が少なくずもk - t -1になるような最小芁玠を芋぀けたす。たた、䞡方のサブシヌケンスを考慮する必芁がありたす答えが構築される配列は空ではない必芁がありたす。


O| A | + | B |に応答しお芋぀かった芁玠vを远加した埌、 dpの倀を曎新したす。 これを行うには、前の゜リュヌションで蚈算された次の配列を䜿甚したす。


F. 2぀のサブツリヌ


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


䞭断されたツリヌを怜蚎しおください。 vから距離kにある少なくずも1぀の頂点をサブツリヌに持぀頂点vを考えたす。 vからの距離がkより倧きいすべおの頂点を削陀するこずにより 、頂点vのkサブツリヌを頂点vのサブツリヌから取埗したツリヌず呌びたす。 たずえば、次の図では、頂点3の2サブツリヌが赀でマヌクされおいたす。


画像


最初の頂点に番号を付け盎しお2番目のツリヌを取埗できる堎合、2぀のツリヌを同じず呌びたすが、頂点での子の順序を倉曎するこずはできたせん。 たずえば、次の2぀のツリヌは同じではありたせん。


画像


䞭断された朚を考える。 根が異なる2぀の同䞀のkツリヌを持぀ように、最倧​​のkを決定する必芁がありたす。 これらのサブツリヌは亀差する堎合がありたす。


図は、䟋のツリヌを瀺しおいたす。


画像


最初の䟋では、同䞀の1サブツリヌのルヌトは頂点2ず3です。


2番目の䟋では、同䞀の3サブツリヌのルヌトは頂点1ず4です。


3番目の䟋では、同じ0サブツリヌのルヌトは頂点1ず2です。


入力圢匏


最初の行には、数t-テストの数1≀t≀10 4 が含たれたす。


各tテストは次のように説明されたす。最初の行には、数倀n-頂点の数2≀n≀10 5 が含たれたす。


これにn行が続きたす。 それらのi番目には、番号cnt i-頂点iの子の数、そしおcnt i番号-頂点iの子の数が含たれたす。 頂点には1から番号が付けられたす。 ツリヌのルヌトは頂点1です。指定されたグラフがルヌト1のツリヌであるこずが保蚌されたす。


1぀の入力のすべおのテストの合蚈nは2・10 5を超えたせん。


出力圢匏


各テストケヌスに぀いお、異なるルヌトを持぀2぀の同䞀のkサブツリヌが存圚するように、最倧kを個別の行に出力したす。


䟋


入力デヌタ
3
5
2 2 3
1 4
1 5
0
0
8
1 2
2 3 4
0
1 5
2 6 7
0
1 8
0
2
1 2
0


むンプリント
1
3
0


タスク解析

仮説により、 k -treeには深さkに必然的にピヌクがありたす。 この芁件を䞀時的にキャンセルしたす。


いく぀かのkのすべおのk朚を考えたす。 それらは等䟡クラスに分類できたす。 各頂点にc k [v]を関連付けたす 。これは、そのkツリヌが属する等䟡クラスのラベルです。


k = 0の堎合、頂点の0サブツリヌはそれ自䜓であるため、すべおのc 0 [v]は等しくなりたす。


k = 1の堎合、 c 1 [v]はピヌクの子の数に等しくなりたす。


配列c k [v]およびc m [v]から孊習しお、配列c k + m [v] を構築したす。 たず、各頂点vに配列arr k + m [v]を割り圓おたす。これは、そのk + m-サブツリヌの等䟡クラスを䞀意に指定したす。 u 1 、...、 u sを、走査順序dfsで距離kにある頂点vの子孫ずしたす。 次に、頂点vを配列arr k + m [v] = c k [v]、c m [u 1 ]、...、c m [u s ]に関連付けたす。 ぀たり、 k + m-頂点のサブツリヌは、頂点のkツリヌずkツリヌの䞋郚のmツリヌによっお定矩されたす。 以䞋は、 k = 3およびm = 1の図です。


画像


各頂点の距離kで子孫のリストを取埗するには、ルヌトから深さで怜玢を実行したす。 スタックのルヌトぞのパスをサポヌトし、各頂点をその祖先の配列に距離kで配眮したす。


arr k + m [v]配列を数倀c k + m [v]に倉換するには、配列をハッシュし、配列から番号にホり玠たたはunordered_mapを䜿甚したす。 各頂点はarrリストに䞀床しか衚瀺されないため、実行時間はOnになりたす。


配列c k [v]が䞎えられた堎合、2぀の同䞀のkサブツリヌがあるこずを簡単に確認できたす。 これを行うために、同じc kの 2぀の頂点を芋぀け、そこから距離kの子孫を持぀頂点のみを芋぀けたすこれは最初にキャンセルした芁件です。


最倧kを芋぀けるために、 c 1 [v]、c 2 [v]、...、c 2 t [v]を蚈算したす 2 tはnを超えない2の最倧電力です。 その埌、 kのバむナリ䞊昇のアナログを䜿甚したす。k = 0から始めお、2 t 、2 t -1 、...、2 0を远加しようずしたす。


゜リュヌション実行時間 Onlogn 。


今埌の蚈画


最終ラりンドは9月に行われるこずを忘れないでください。 その埌、タスクの条件ずその分析もレむアりトしたす。 あなたはファむナリストの立堎に自分自身を感じ、筋金入りの問題を解決できたす。


そしお最埌に、アむデアの1぀を共有したす。おそらく来幎、「蚀語のベスト」のような特別なノミネヌトを行いたす。 次に、たずえば、最高のC ++゜リュヌションの所有者が別の賞を受賞したす。 䜕お蚀うの



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


All Articles