这道题是水题,发现平移某些边,答案就是圆心的凸包+一个圆的周长。

  不要忽视精度误差!

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=;
const double eps=1e-;
const double Pi=acos(-1.0);
int sgn(double x){
if(x>eps)return ;
if(x<-eps)return -;
return ;
}
struct Point{
double x,y;
Point(double _=,double __=){x=_;y=__;}
friend Point operator+(Point a,Point b){
return Point(a.x+b.x,a.y+b.y);
}
friend Point operator-(Point a,Point b){
return Point(a.x-b.x,a.y-b.y);
}
friend bool operator<(Point a,Point b){
return sgn(a.y-b.y)?sgn(b.y-a.y)>:sgn(b.x-a.x)>;
}
}st[*N],p[*N];
double Cross(Point a,Point b){
return a.x*b.y-a.y*b.x;
} Point Rotate(Point a,double th){
double s=sin(th),c=cos(th);
return Point(a.x*c-a.y*s,a.x*s+a.y*c);
} double sqr(double x){return x*x;}
double Dis(Point a,Point b){
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
} bool cmp(Point a,Point b){
double c=Cross(a-p[],b-p[]);
if(sgn(c)>)return true;
if(sgn(c)<)return false;
return sgn(Dis(p[],b)-Dis(p[],a))>;
} double a,b,r;
double x,y,th;
int n,pos,top,tot;
int main(){
freopen("card.in","r",stdin);
freopen("card.out","w",stdout);
scanf("%d",&n);
scanf("%lf%lf%lf",&b,&a,&r);
a=a/2.0;a=a-r;b=b/2.0;b=b-r;
for(int i=;i<=n;i++){
scanf("%lf%lf%lf",&x,&y,&th);
Point O(x,y);
p[i*-]=Rotate(Point(x+a,y+b)-O,th)+O;
p[i*-]=Rotate(Point(x+a,y-b)-O,th)+O;
p[i*-]=Rotate(Point(x-a,y+b)-O,th)+O;
p[i*-]=Rotate(Point(x-a,y-b)-O,th)+O;
}
sort(p,p+*n);
for(int i=;i<*n;i++){
if(i==)p[tot++]=p[i];
else if(sgn(p[i].x-p[i-].x)||sgn(p[i].y-p[i-].y))
p[tot++]=p[i];
}
sort(p+,p+tot,cmp);p[tot]=p[];
st[]=p[];st[]=p[];top=;
for(int i=;i<=tot;i++){
while(top>=&&sgn(Cross(st[top]-p[i],st[top-]-p[i]))>=)top--;
st[++top]=p[i];
}
double ans=2.0*Pi*r;
for(int i=;i<=top;i++)
ans+=Dis(st[i],st[i-]);
printf("%.2f\n",ans);
return ;
}

计算几何(凸包):SHTSC 2012 信用卡凸包的更多相关文章

  1. 【计算几何】【凸包】bzoj2829 信用卡凸包

    http://hzwer.com/6330.html #include<cstdio> #include<cmath> #include<algorithm> us ...

  2. 【BZOJ 2829】 2829: 信用卡凸包 (凸包)

    2829: 信用卡凸包 Description Input Output Sample Input 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 Sa ...

  3. bzoj 2829 信用卡凸包(凸包)

    2829: 信用卡凸包 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1342  Solved: 577 [Submit][Status][Disc ...

  4. 【BZOJ2829】[SHOI2012]信用卡凸包(凸包)

    [BZOJ2829][SHOI2012]信用卡凸包(凸包) 题面 BZOJ 洛谷 题解 既然圆角的半径都是一样的,而凸包的内角和恰好为\(360°\),所以只需要把圆角的圆心弄下来跑一个凸包,再额外加 ...

  5. Luogu-3829 [SHOI2012]信用卡凸包

    这道题的转化很巧妙,可以把信用卡四个角的圆心看做平面上的点来做凸包,\(ans\)就是凸包周长加上一个圆的周长 // luogu-judger-enable-o2 #include<cmath& ...

  6. [SHOI2012]信用卡凸包(凸包+直觉)

    这个题还是比较有趣. 小心发现,大胆猜想,不用证明! 我们发现所谓的信用卡凸包上弧的长度总和就是圆的周长! 然后再加上每个长宽都减去圆的直径之后的长方形的凸包周长即可! #include<ios ...

  7. [BZOJ2829] 信用卡 (凸包)

    [BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...

  8. luogu P3829 [SHOI2012]信用卡凸包 凸包 点的旋转

    LINK:信用卡凸包 当 R==0的时候显然是一个点的旋转 之后再求凸包即可. 这里先说点如何旋转 如果是根据原点旋转的话 经过一个繁杂的推导可以得到一个矩阵. [cosw,-sinw] [sinw, ...

  9. 计算几何(一):凸包问题(Convex Hull)

    引言 首先介绍下什么是凸包?如下图: 在一个二维坐标系中,有若干点杂乱排列着,将最外层的点连接起来构成的凸多边型,它能包含给定的所有的点,这个多边形就是凸包. 实际上可以理解为用一个橡皮筋包含住所有给 ...

随机推荐

  1. swift-06-字符串,字符以及元组类型

    1.字符串和字符类型 //在swift中,字符串使用一对双引号括起来 var str = "hello M.SD-DJ" print(str) //字符也要用双引号括起来,用cha ...

  2. HTML教程:link标记

    开发php语言的网站,<head>里link标签这样:<link href="xmlrpc.php?rsd=1" title="rsd" ty ...

  3. MYSQL命令cmd操作

    今天我们就来看一下数据库的各种命令,以下命令全部是从CMD命令窗口下的命令行输入指令,首先如果如果输入mysql,系统提示“mysql不是内部命 令或外部命令.那么这其实是环境变量没有设置好的原因,例 ...

  4. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    http://quote.eastmoney.com/center/list.html#28003501_0_2 http://bbs.tianya.cn/post-53726-21098-1.sht ...

  5. MySQL的基本

    MySQL的基本语法 left JOIN 左表匹配右表 有没有内容全部匹配 SELECT Persons.LastName, Orders.OrderNo FROM Persons INNER JOI ...

  6. yii学习随感

    最近我们公司信易网络在用yii开发一个项目自己临时学习了一下yii 把学习感悟和大家一起分享一下 Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供 ...

  7. TDirectory.GetCreationTime、TDirectory.SetCreationTime获取和设置文件夹创建时间

    使用函数: System.IOUtils.TDirectory.GetCreationTime//获取创建时间 System.IOUtils.TDirectory.SetCreationTime//设 ...

  8. SSM框架+Plupload实现断点续传(Spring+SpringMVC+MyBatis+Plupload)

    关于Plupload的介绍,相信它的官网http://www.plupload.com/已经给得很详细了.Plupload的上传原理简单点说,就是将用户选中的文件(可多个)分隔成一个个小块,依次向服务 ...

  9. Memcached(二)Memcached Java API基础之MemcachedClient

    1. 构造函数 public MemcachedClient(InetSocketAddress[] ia) throws IOException; public MemcachedClient(Li ...

  10. 第 16 章 观察者模式【Observer Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> <孙子兵法>有云:“知彼知己,百战不殆:不知彼而知己,一胜一负:不知彼,不知己,每战必殆”,那怎么才能知己知 ...