bzoj2829 信用卡凸包 凸包

2021-07-13 22:04:10 字數 709 閱讀 8308

26.0 2.0 0.0

0.0 0.0 0.0

2.0 -2.0 1.5707963268

21.66

本樣例中的2張信用卡的輪廓在上圖中用實線標出,如果視1.5707963268為

pi/2(pi為圓周率),則其凸包的周長為16+4*sqrt(2)

題解:把邊上的圓去掉然後求一遍凸包,最後再加上乙個圓的周長即可.

求頂點的時候注意角度問題.

**:

#include#include#include#include#include#define n 100010

#define eps 1e-8

#define pie acos(-1)

using namespace std;

int n,cnt,top;

double ans,a,b,r;

struct usep[n<<2],st[n<<2];

struct matma[n];

bool operator

void graham()

}void getpoint(),b/2,k*pie/2+ma[i].angle);

p[++cnt]=rotate(t,a/2,(k+1)*pie/2+ma[i].angle);

swap(a,b);

}}int main()

bzoj 2829 信用卡凸包 (凸包)

time limit 10 sec memory limit 128 mbsec special judge submit 327 solved 151 submit status discuss 26.0 2.0 0.0 0.0 0.0 0.0 2.0 2.0 1.5707963268 21.66...

BZOJ 2829 信用卡凸包 凸包

傳送門 bzoj2829 太zz了,這麼水的題都沒想出來。如果是矩形,凸包上的點一定都是矩形的頂點,gra ha mgraham graham 求出凸包後將每個頂點的尖角轉成圓弧,貢獻不好算。於是將矩形的頂點轉成四個1 4 frac 14 41 圓的圓心,求出凸包周長後 乙個圓的周長即可。直接貼黃學...

BZOJ2829 信用卡凸包

標籤 凸包 題目傳送門 description input output sample input 26.0 2.0 0.0 0.0 0.0 0.0 2.0 2.0 1.5707963268 sample output 21.66 hint 本樣例中的2張信用卡的輪廓在上圖中用實線標出,如果視1.5...