BZOJ2829 信用卡凸包

2021-08-14 19:29:54 字數 1404 閱讀 8906

標籤:凸包

題目傳送門

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.5707963268為

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

凸包加乙個圓的周長,注意建圖

#include

#include

#include

#include

#include

#include

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define dep(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

#define mem(x,num) memset(x,num,sizeof x)

#define reg(x) for(int i=last[x];i;i=e[i].next)

#define pi acos(-1)

#define eps 1e-8

using

namespace

std;

inline ll read()

while(ch>='0'&&ch<='9')

return x*f;

}const

int maxn=4e5+6;

double ans,a,b,r;int n,cnt=0,top;

struct p

friend p operator - (p a,p b)

friend

double

operator * (p a,p b)

friend

bool

operator

< (p a,p b)

}p[maxn],s[maxn];

struct nodew[maxn];

inline p move(p a,double d,double angle)

inline

bool cmp(p a,p b)

void graham()

s[top+1]=s[1];

rep(i,1,top)ans+=sqrt(dis2(s[i]-s[i+1]));

}int main()

graham();

printf("%.2lf\n",ans);

return

0;}

BZOJ2829 信用卡 凸包

信用卡是乙個矩形,唯四個角做了圓滑處理,使他們都是與矩形兩邊相切的1 4園,如下圖所示,現在平面上有一些規格相同的信用卡,試求其凸包的周長。注意凸包未必是多邊形,因為他有可能包含若干段圓弧。我們發現凸包的圓弧段可以縮成乙個圓,然後將直線段向內平移,就可以組成乙個多邊形 因此對每個卡的四個圓心跑凸包,...

Bzoj2829 信用卡凸包

time limit 10 sec memory limit 128 mbsec special judge submit 333 solved 155 26.0 2.0 0.0 0.0 0.0 0.0 2.0 2.0 1.5707963268 21.66 本樣例中的2張信用卡的輪廓在上圖中用實線標...

bzoj2829 信用卡凸包 凸包

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 題解 把邊上的圓去掉然後求一遍凸包,最後再加上乙個圓...