bzoj2829 信用卡凸包

2829: 信用卡凸包

Time Limit: 10 Sec   Memory Limit: 128 MBSec   Special Judge
Submit: 226   Solved: 102
[ Submit][ Status][ Discuss]

Description

bzoj2829 信用卡凸包_第1张图片

Input

bzoj2829 信用卡凸包_第2张图片

Output

Sample Input

2
6.0 2.0 0.0
0.0 0.0 0.0
2.0 -2.0 1.5707963268

Sample Output

21.66

HINT

bzoj2829 信用卡凸包_第3张图片


本样例中的2张信用卡的轮廓在上图中用实线标出,如果视1.5707963268为

Pi/2(pi为圆周率),则其凸包的周长为16+4*sqrt(2)




凸包

将图形去掉外面一层,留下中间的矩形,求出凸包,最后加上一个圆的周长。




#include
#include
#include
#include
#include
#include
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 400005
#define eps 1e-8
using namespace std;
int n,cnt,top;
double a,b,r,x,y,angle,ans;
const double pi=acos(-1);
struct P
{
	double x,y;
	P(double xx=0,double yy=0){x=xx;y=yy;}
	friend P operator -(P a,P b){return P(a.x-b.x,a.y-b.y);}
	friend double operator *(P a,P b){return a.x*b.y-a.y*b.x;}
	friend bool operator <(P a,P b){return fabs(a.y-b.y)0;
}
inline void solve()
{
	F(i,2,cnt) if (p[i]1&&(s[top]-s[top-1])*(p[i]-s[top-1])


你可能感兴趣的:(凸包,OIer的狂欢)