bzoj2829 信用卡凸包
2016-05-19 00:39
197 查看
2829: 信用卡凸包
Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 226 Solved: 102
[Submit][Status][Discuss]
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.66HINT
本样例中的2张信用卡的轮廓在上图中用实线标出,如果视1.5707963268为
Pi/2(pi为圆周率),则其凸包的周长为16+4*sqrt(2)
凸包
将图形去掉外面一层,留下中间的矩形,求出凸包,最后加上一个圆的周长。
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#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)<eps?a.x<b.x:a.y<b.y;}
}p[maxn],s[maxn];
inline P move(P a,double len,double angle)
{
return P(a.x+len*cos(angle),a.y+len*sin(angle));
}
inline double dis(P a,P b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
inline bool cmp(P a,P b)
{
double tmp=(a-p[1])*(b-p[1]);
return fabs(tmp)<=eps?dis(p[1],a)<dis(p[1],b):tmp>0;
}
inline void solve()
{
F(i,2,cnt) if (p[i]<p[1]) swap(p[1],p[i]);
sort(p+2,p+cnt+1,cmp);
F(i,1,cnt)
{
while (top>1&&(s[top]-s[top-1])*(p[i]-s[top-1])<eps) top--;
s[++top]=p[i];
}
}
int main()
{
scanf("%d",&n);
scanf("%lf%lf%lf",&a,&b,&r);
a-=2*r;b-=2*r;ans=2*pi*r;
F(i,1,n)
{
scanf("%lf%lf%lf",&x,&y,&angle);
F(j,1,4)
{
P tmp=move(P(x,y),b/2,angle+pi/2*(j-1));
p[++cnt]=move(tmp,a/2,angle+pi/2*j);
swap(a,b);
}
}
solve();
s[top+1]=s[1];
F(i,1,top) ans+=sqrt(dis(s[i],s[i+1]));
printf("%.2lf\n",ans);
return 0;
}
相关文章推荐
- 125_ListView和UI卡顿
- javascript 监听事件
- HDOJ/HDU 2710 Max Factor(素数快速筛选~)
- 定制班第二课 -----通过案例对Spark Streaming透彻理解三板斧之二:解密SparkStreaming运行机制和架构
- HDOJ/HDU 2710 Max Factor(素数快速筛选~)
- js数组去重的4个方法
- Nhibernate HQL 匿名类(严格说是map的使用以及构造函数的使用
- 124_inflate原理二
- bzoj1096【ZJOI2007】仓库建设
- 文件下载,或直接将字符串下载
- Unable to to create media player
- 函数表达式
- 122_findViewById原理
- Python基础(四) 基础拾遗、数据类型进阶
- JavaScript中的匿名函数及函数的闭包
- 在myeclipse用maven报错
- 121_非对称加密
- bzoj3437 小P的牧场
- Retrofit2与RxJava用法解析
- swift中解决闭包循环引用的几种方式