A.マッチング
$ハッシュ$直接従事する。
あなたは$ KMP $を使用する場合は、Bおよび文字列完全一致に注意を払う、これは$ KMP $を扱うことができない問題です。
B.ホーム
最初に私は慎重な考えは間違っていたので、後に、それはカットポイントだと思いました。
そして、木のラウンドサイド、ノースキルを打ちます。
もう一つの簡単な方法:
唯一のカットポイントを分析するが、カット点を決定する方法を修正しました。
1 空隙 tarjan(INT X) 2 { 3 int型の息子= 0 。 4つの DFN [X] =低[X] = ++ NUM。 5 用(登録INT I = FRを[X]; I; I = MO [I] .pr) 6 { 7 レジスタint型、Y = MO [I] .TO。 8 もし(!DFN [Y]) 9 { 10 tarjan(Y)。 11 低[X] = 分(低[x]は、低[Y])。 12 であれば(低[Y]> = DFN [X]は&& DFN [Y] <= DFN [N]) 13 { 14 息子++ 。 15 であれば(X =!1人の ||息子> 1)カット[X] = 1 。 16 } 17 } 18 他の低[X] = 分(DFN [Y]、[x]は低いです)。 19 } 20 }
C.寿司
チェーンオフリングに、即ち、1〜n-1がn個の文字列の長さの後に添加しました。
0と1にRとBの問題として、
問題点は、長さn、動きのセグメントに取り込まれているので分布範囲のすべての左右。
1各交換は、最適な結果を確保するために見つけることは容易で0でなければなりません。
左に1の場合、中間体および左端点マイナスからの距離の両方の数に等しい移動距離。
式は$ O(1)$計算を導入することができるように、接頭辞の使用を最適化します。
O(N ^ 2)$列挙左間隔及び右分割線1を$することができ、最小値をとります。
列挙プロセスの最適化について:
各間隔の考えることが難しいため、分割線は、谷のための単一関数値です。(証明は省略し、基準は正の解のO(n)を証明することができます)
単峰性関数とすることができる極端な値を求めて三分ののルールを使用してください。
整数フィールドの注意、三分ののルールは、更新しようとする必要があり、せいぜい3の区間長の極値に縮小することができます。
複雑$ O(nlogn)はわずかに大きい定数$。
また、右に見つけ、最適な意思決定ポイントの範囲は左単調ではありません。
最適な決定点は固定値であると、番号0が間隔Tを設定されています、
中点約0 tが奇数の場合、最適な決定。
約2ゼロへの中央値でtが偶数の場合、最適な判断ポイント。
証明:(グレート神YXS)
各移動距離の両側に左右のエンドポイントで1と0の間の数に相当します。
、それは点が左側にあり、より好ましくは、位置0に残っている1、のそれぞれについて
ポイントを右へ、またその逆より良いです。
不変の間隔0の総数からです。
場合は、右に間隔、
元の左のポイント1、そのまま中央値0の場合。
適切な場所で、元の左のポイント0、0の場合。
したがって、$ $一方に右かどうかが決定されると、0単調に変化する、記録ビット位置0へのポインタをビット。
常に更新答え、合計複雑さの$ O(n)と$