015学校は香港Lianshun(見出し)を逮捕考えもしないZhentiの練習を募集

私は逮捕コングLianshunを期待していませんでした

タイトル説明
私の名前のハンマーは、薬剤です。テロリスト香港Lianshunを逮捕、バイト単位でビートストリート待ち伏せ:私は使命を受けました。そして私は、私が提案し、他の二つの薬剤がある一緒に行動します

我々はNバイトで選択された1.3待ち伏せサイトでは、ストリートの建物を打ちます。
2.お互いの世話をするために、我々は二つの薬剤間の最も遠い距離がDを超えていないことを決めました

質問を聴いてください:大きい、N(待ち伏せ点として、建物の選択番号)、D(最大遠い二つの薬剤の間の距離)と、この演算で算出任意アーキテクチャ座標を、与えられましたハンマー隊どのように多くの待ち伏せ選択。

注:
1.二つの薬剤は、同じ場所に影響されていない
3つのエージェントが同等である2:すなわち、同じ位置の組み合わせ(A、B、C)のみないので、「エージェントとの位置交換の、方法と考えることが影響します「繰り返しの使用

入力説明
最初の行は、2つのスペースで区切られた番号N及びD含有する(1≤N≤1000000; 1≤D≤1000000)を
整数各位置、第二の線は、建物のNの位置が含まれている(値区間[0、100万)は昇順(ストリート軸を見1つのバイトジッタ)で表します

出力説明
影響を受ける異なるスキームの数を示す数字。結果は、オーバーフロー99997867剰余を求めることができます

1  DEFメイン():
 2      LINE0 =リスト(マップ(INT。。、入力()ストリップ()スプリット('  ' )))
 3つの      建物=リスト(マップ(INT。。、入力()ストリップ()スプリット('  ' )))
 4      N、Dは= LINE0 [ 0 ]、LINE0 [ 1 ]
 5      もし N < 3 6          プリント(0 7      8          DP = [ 0 ] * N
 9          もし建物[ 2 ] -建物[ 0 ] <=D:
 10              DP [ 2 ] = 1 
11          I = 3 
12          = J 0 
13          ながら、 iは< N:
 14              ながら、 J <= I - 2 15                  であれば建物[I] -建物[J]> D:
 16                      J + = 1 
17                  18                      休憩
19              DP [I] =(I - J)*(I - J - 1// 2 
20              I + = 1 
21の          合計= SUM(DP)
22          プリント(和%99997867 23  
24  なら __name__ == ' __main__ ' 25      (メイン)

アルゴリズムのアイデア:スライディングウィンドウ+ +動的計画の組み合わせ。

このトピックでは、いくつかの困難を持っている、それが話題アルゴリズム思考の包括的な品種です。

まず、被験者は、距離D以上ではない「の組み合わせの数」を算出し、ノード3は、サブインターバル未満である、任意の三点を取り、それらの組み合わせを構成することです。

左から右にこのサブインターバル。移動中に設定することができる組合せの新しい数が算出されます。

DPの初期化は、記録のために:DP [i]は、サブ領域の最大数はこれらの組み合わせであってもよい(必ずしもノードを含むI)の端部です。

iが含まれている必要があり、ノードので、単に前に、このノードの最大可能なサブ領域を考慮して、任意の2つのノードをさらに取ることができます。

たとえば:3に等しい、* 3 2 // 2:3つのノードのように計算任意の2つのノードを取ります

     6に等しい4 * 3 // 2:4つのノードは、のように計算任意の2つのノードを取ります

これは、ライン19上の式にまとめることができます。

DP和の右端、一度完全なトラバーサルに右にウィンドウのスワイプは、所望されます。

ウィンドウ戦略をスライディングライン13〜18の行為は、私はjは左マージンで、右の境界です。閉じた間隔内のすべてのノード[jは、I-1]任意の2つのノードを取るたびに計算されます。

おすすめ

転載: www.cnblogs.com/asenyang/p/11220277.html