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

  不要忽视精度误差!

 #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. WPF动画之关键帧动画(2)

    XAML代码: <Window x:Class="关键帧动画.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  2. nvmw install 失败. 需修改"Msxml2.XMLHTTP"为"Msxml2.ServerXMLHTTP"

    准备在windows下学习nodejs. 下载了nvmw . 但没法安装node的任何版本. 都是报错如下: C:\Users\WXG>nvmw install v0.12.0 x86 Star ...

  3. 暑假集训(1)第八弹 -----简单迷宫(Poj3984)

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  4. 九度0J 1374 所有员工年龄排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1374 题目描述: 公司现在要对所有员工的年龄进行排序,因为公司员工的人数非常多,所以要求排序算法的效率要非常高,你 ...

  5. 使用CPA4破解经典密码算法

    下面是一段经过经典密码算法加密的密文(加密算法未知): yvvnerujjvnywhbdvkpchfgvjtzwqsuporqfzpoekkjgziicdwwkeejdsruef   whwseyej ...

  6. IOS 学习笔记 2015-04-08 OC-NSUserDefaults 持久化对象

    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的; NSUserDefaults被设计用来存储设备和应用的配置信息,它通过一个工厂方法返回默认的. ...

  7. mysql 查找包含特定名字的表

    SELECT distinct TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '%medias%'

  8. jquery中的 .html(),.val().text()

    .html(),.text(),.val(),.html()用为读取和修改元素的HTML标签,包括标签内的内容.text()用来读取或修改元素的纯文本内容,去除 html 标签.val()用来读取或修 ...

  9. SVG

    目前SVG在国内的使用并不常见,并且关于svg的相关js库也不多,这里指出两款svg的库Snap.svg和svg.js,Snap.svg张鑫旭的博客上有关于他的使用APi http://www.zha ...

  10. tomcat配置虚拟目录的步骤

    1.在tomcat中.....\conf\Catalina\localhost中创建一个test.xml文件 2.然后在\conf的server.xml中的 <Host > 元素里面 添加 ...