洛谷 P2116 城牆

2021-10-02 21:30:22 字數 2300 閱讀 2974

給出乙個n邊多邊形,要求構造另乙個圖形,使新多邊形在舊多邊形外部,且最近處的距離大於等於l,還要使構造的圖形面積盡量小。

求新構造形狀的邊長

3 ≤ n ≤ 1000,1 ≤ l ≤ 1000

首先要理解好題意。。。是多邊形外套某圖形。

很容易想到的辦法是,處處與內部間隔l,這就要求了在拐角處可能會出現圓弧,經過更加細緻的考慮,發現將多邊形的邊垂直外推l,拐角處設定圓弧即可。

但是這個問題還有兩個細節:原多邊形的凹凸問題,拐角處的弧長具體怎麼算。

先考慮第乙個問題,如果只是簡單外推,發現這種外圍不是最優的,紅色是凹部分的外推,但是綠色才是更短的(也是最短的)。

為了避免這種凹處的外推,就消除掉原多邊形的凹處,首先作原多邊形的凸包,再將邊進行外推。

這裡的綠色,其實就是凸包外推的結果。

拐角的弧長,也就是凸包外推後連線間斷點的弧,圓心是凸包的頂點

像這個,未標出的那段弧就是計入在最終長度的弧

計入長度弧長的圓心角可以發現是 180-w,每乙個頂點都是這樣,也就是說,最終計入的圓心角是:

n π−

(n−2

)π=2

πn\pi-(n-2)\pi=2\pi

nπ−(n−

2)π=

2π,前面是因為n個頂點,後面是凸n邊形的內角和

現在就發現,最終新圖形的長度是由內多邊形凸包的邊長 + 2πl

2\pi l

2πl構成

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

struct point

point

(double a,

double b):x

(a),

y(b)

double x, y;

intdcmp

(double x)

//誤差取等

bool

operator

<

(const point& other)

//為了sort

else

}bool

operator==(

const point& other)

//為了unique};

struct vect//向量

//從點構造向量

double

cross

(vect other)

//叉積};

vector v;

//存所有點,並進行從小到大排序

int line[

1005

], ptr =0;

//儲存凸殼路徑

void

convex()

//求凸殼

}double

dis(point& a, point& b)

intmain()

sort

(v.begin()

, v.

end())

; v.

resize

(unique

(v.begin()

, v.

end())

- v.

begin()

);//去重點

double ans =0;

//記錄凸殼長度

convex()

;//求下凸殼

for(

int i =

1; i < ptr; i++

) ptr =0;

reverse

(v.begin()

, v.

end())

;convex()

;//求上凸殼

for(

int i =

1; i < ptr; i++

) ans +

=3.141592653538462643383279*2

*l; cout << fixed <<

setprecision(0

)<< ans;

return0;

}

洛谷P5049 洛谷P5022 題解 旅行

原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...

洛谷練習P2279 P1346

2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...

洛谷 P1396 營救

題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...