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

  不要忽视精度误差!

 #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. java新手笔记19 抽象类

    1.Shap package com.yfs.javase; public class Shape /*extends Object */{ //默认继承object object方法全部继承 //计 ...

  2. 10.26_地图应用, OSC_doc文档集合,node-webkit

    (1)地图:关于电子地图的加载.展示方式,知乎上有篇文章写的很好:http://www.zhihu.com/question/21530085对于地图的导航距离计算呢?原理是什么? (2)node-w ...

  3. 什么是CGI(Common Gateway Interface)?

    参考: 1.Python CGI编程 2.十分钟搞懂CGI 3.CGI Made Really Easy

  4. C语言程序设计概述

    1 概论 1972年Dennis Ritchie发明了C语言,而后Dennis Ritchie又使用C语言重写了Unix系统,自那以后C语言逐渐受到了全世界大多数编程爱好者的喜爱,后期的主流操作系统L ...

  5. Struts2配置文件_常量属性_独立测试分析

    <constant name="struts.devMode" value="true" /> 设置开发模式,可以了解详细信息,该属性指定视图标签默 ...

  6. (转)myrepo

    源作者主页:https://copr.fedoraproject.org/coprs/mosquito/myrepo/ 源作者github: https://github.com/1dot75cm/m ...

  7. windows+apache2.2.9+php5.4.41+mysql安装

    安装Apache(D盘根目录下) (1)打开D:\Apache24\conf下httpd.conf 文件,用记事本打开编辑作如下修改并保存. 第37行ServerRoot "c:/Apach ...

  8. HTML XML XHTML DHTML区别与联系

    (1)HTML HTML是超文本标记语言 (2)XML XML是可扩展标识语言,但XML是一种能定义其他语言的语. XML最初设计的目的是弥补HTML的不足, 以强大的扩展性满足网络信息发布的需要 , ...

  9. mui h5 动态实现数据的移除和数据操作完后的重新获取

    HTML 代码 <ul class="mui-table-view" id="OA_task_1"> <li class="mui- ...

  10. php 定时执行任务

    之于是否控制,可以做到的,应借用第三个条件: config.php <?phpreturn 1;?> cron.phpignore_user_abort();//关掉浏览器,PHP脚本也可 ...