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