HDU 1542「アトランティス」(走査線セグメントツリー+)

 

ポータル

 

•問題の意味

  あなたのn長方形は、各矩形はあなたに$(X_1、Y_1)、(X_2、Y_2)それぞれこの長方形の$、コーナーを提供します。

  あなたは、nと矩形領域を見つけることができます。

  ここで、$ X \当量10 ^ {5} \ \のY \の当量10 ^ {5} $。

•問題解決

  このような練習のソリューションは、より重要なアルゴリズムを使用する必要があります-走査線アルゴリズムを、

  実際には、我々はそのような質問の徹底的な研究だけ走査線アルゴリズムのアイデアを使用する方法のラインアルゴリズムをスキャンする必要はありません。

  ここでは、走査線を開始し、このような問題に対処する方法について話します。

  図に示すように、あなたは、2つの矩形があるとし、

    

 

  ①コーナーは長方形である:(3.4 \ 4.5 \、)(1.4 \ 1.2 \、)$、$

  ②長方形の角は、以下のとおりです(2.6 \ 3.5 \、)$、(7.6 \ 4.8 \)$

  さて、仮想走査線が上から下全体のポリゴンをスキャンし、そこにあります。

    

  走査線1は、長方形の長さが$ line_ {1} = 4.5から1.2 = 3.3 $走査される計算、走査線の位置から走査を開始します。

  時間(H_2-H_1)$ \矩形領域の$ area_を走査する走査線1から計算された位置2までの位置1から走査線、2 {1} = line_ {1}。

  及び矩形の$ line_ {2} = 7.6から1.2 = 6.4 $の走査長に走査線2を計算します。

  3を位置決めする上方第二の位置からの走査線は、走査線2及び3は、$ area_ {2} = line_ {2} \回(H_ {3} -h_ {2})$の矩形領域を走査するように計算されます。

  3矩形の走査線の長さを計算は$ line_ {3} = 7.6から3.5 = 4.1 $走査されます。

  4を位置決めするための第三の上方位置からの走査線は、走査線は3,4 $ area_ {3} = line_ {3} \回(H_ {4} -h_ {3})$の矩形領域を走査するように計算されます。

  これにより、それは走査線と矩形$領域の面積によって決定される= area_ {1} + area_ {2} + area_ {3} $。

  上記のシミュレーションを通じ、走査線を使用するために知ることができ、その後、あなたは次の準備を実行する必要があります。

    (1)底部に矩形を保持

    (2)高さに応じて情報を発注が保存されます

  それでは、どのようにそれを記録していますか?

  次のように私たちは、定義された下部構造のすべてを保持するための構造を使用することができます。

1  構造体データ
 2  {
 3      ダブル L、R< /// 側についての情報を保存
4。     ダブル H; /// 保存エッジ高さ
5。     INT F; ///は矩形の上縁が下とその上に配置されていると判断します-1を割り当て、下側に割り当てられた1。
6。     BOOLの 演算子 <(constのデータとOBJ)CONST /// エッジの高さの昇順に並べ
7。     {
 8。         復帰 H < obj.h;
 9      }
 10 } [MAXN << 1。 ]。

  次に、長方形の情報の双方が同様に横並びの配列に格納されています。

    $のA_ {1}:\ {L = 1.2 \ \ R = 4.5 \ \さh = 1.4 \ \ F = 1 \} $

    $のA_ {2}:\ {L = 3.5 \ \ R = 7.6 \ \さh = 2.6 \ \ F = 1 \} $

    $ A_ {3}:\ {L = 1.2 \ \ R = 4.5 \ \ H = 3.4 \ \ F = -1 \} $

    $ A_ {4}:\ {L = 3.5 \ \ R = 7.6 \ \ H = 4.8 \ \ F = -1 \} $

  座標が大きいため、横軸は離散的である必要があります。

•コード

  HDU1542.cpp

おすすめ

転載: www.cnblogs.com/violet-acmer/p/11459504.html