【计算几何】【凸包】bzoj2829 信用卡凸包
http://hzwer.com/6330.html
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 100001
#define EPS 0.00000001
typedef double db;
const db PI=acos(-1.0);
struct Point{db x,y;}p[N<<2],bao[N<<2];
bool operator < (Point a,Point b){return fabs(a.x-b.x)>=EPS?a.x<b.x:a.y<b.y;}
typedef Point Vector;
Vector operator + (Vector a,Vector b){return (Vector){a.x+b.x,a.y+b.y};}
Vector operator - (Vector a,Vector b){return (Vector){a.x-b.x,a.y-b.y};}
Vector Rotate(Vector a,db rad)
{return (Vector){a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad)};}
db sqr(db x){return x*x;}
db Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
db dist(Point a,Point b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));}
int n,m,en;
db a,b,r,mx,my,jiao,ans;
int main()
{
scanf("%d%lf%lf%lf",&n,&b,&a,&r);
a-=(2.0*r);
b-=(2.0*r);
for(int i=1;i<=n;++i)
{
scanf("%lf%lf%lf",&mx,&my,&jiao);
p[++m]=Rotate((Vector){a*0.5,b*0.5},jiao)+(Point){mx,my};
p[++m]=Rotate((Vector){(-a)*0.5,b*0.5},jiao)+(Point){mx,my};
p[++m]=Rotate((Vector){a*0.5,(-b)*0.5},jiao)+(Point){mx,my};
p[++m]=Rotate((Vector){(-a)*0.5,(-b)*0.5},jiao)+(Point){mx,my};
}
sort(p+1,p+1+m);
for(int i=1;i<=m;++i)
{
while(en>1&&Cross(bao[en]-bao[en-1],p[i]-bao[en])<=0.0)
--en;
bao[++en]=p[i];
}
int t=en;
for(int i=m-1;i;--i)
{
while(en>t&&Cross(bao[en]-bao[en-1],p[i]-bao[en])<=0.0)
--en;
bao[++en]=p[i];
}
for(int i=2;i<=en;++i)
ans+=dist(bao[i-1],bao[i]);
printf("%.2f\n",ans+dist(bao[en],bao[1])+PI*r*2.0);
return 0;
}
【计算几何】【凸包】bzoj2829 信用卡凸包的更多相关文章
- [BZOJ2829] 信用卡 (凸包)
[BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...
- BZOJ2829信用卡凸包——凸包
题目描述 输入 输出 样例输入 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 样例输出 21.66 提示 本样例中的2张信用卡的轮廓在上图中用实线标出 ...
- Bzoj2829 信用卡凸包
Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 333 Solved: 155 Description Input ...
- BZOJ-2829 信用卡凸包
凸包题. 我们先把所有信用卡的四个定点的坐标求出来,然后计算凸包长度,最后加上一个圆的周长就行. #include <cstdlib> #include <cstdio> #i ...
- 2019.02.21 bzoj2829: 信用卡凸包(凸包)
传送门 题意:给nnn个A∗BA*BA∗B的矩形,其中每个矩形的四个角被改造成了半径为rrr的四分之一 圆,问这些矩形的凸包周长. 思路:考虑求出圆心的凸包周长然后加上一个整圆的周长,证明很简单,略掉 ...
- 【BZOJ2829】[SHOI2012]信用卡凸包(凸包)
[BZOJ2829][SHOI2012]信用卡凸包(凸包) 题面 BZOJ 洛谷 题解 既然圆角的半径都是一样的,而凸包的内角和恰好为\(360°\),所以只需要把圆角的圆心弄下来跑一个凸包,再额外加 ...
- 【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 ...
- bzoj 2829 信用卡凸包(凸包)
2829: 信用卡凸包 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1342 Solved: 577 [Submit][Status][Disc ...
- [SHOI2012]信用卡凸包(凸包+直觉)
这个题还是比较有趣. 小心发现,大胆猜想,不用证明! 我们发现所谓的信用卡凸包上弧的长度总和就是圆的周长! 然后再加上每个长宽都减去圆的直径之后的长方形的凸包周长即可! #include<ios ...
随机推荐
- myisam_sort_buffer_size vs sort_buffer_size
Q: I am MySQL on server with 6GB RAM. I need to know what is the difference between myisam_sort_buff ...
- rman异机恢复,全部恢复和增量恢复
1.首先准备工作:hostname 192.168.222.11 ol7.localdomain ol7建立相关目录:mkdir -p /u01/app/oracle/oradata/DB11G/mk ...
- ActiveMQ(3) ActiveMQ创建(simpleAuthenticationPlugin)安全认证
控制端安全认证: ActiveMQ目录conf下jetty.xml: <bean id="securityLoginService" class="org.ecli ...
- Git菜鸟
1.git 和svn的差异 git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式.如果不习惯用代码管理工具,可能比较难理解分布式管理和集中式管理的概念.下面介绍两种工具的工 ...
- ${pageContext.request.contextPath}的解释以及和request.contextPath的区别
JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决. 1)采用相对路径遇到的问题 l 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不 ...
- 状压dp的题目列表 (一)
状压dp的典型的例子就是其中某个数值较小. 但是某个数值较小也不一定是状压dp,需要另外区分的一种题目就是用暴力解决的题目,例如UVA818 紫书215 题目列表: ①校长的烦恼 UVA10817 紫 ...
- 【poj3734】矩阵乘法
题解: 若当前有i个格子.2个是偶数的方案数为a[i]1个是偶数的方案数为b[i]0个是偶数的方案数为c[i] a[i+1]=2*a[i](i+1染成黄或蓝)+b[i](把奇数变为偶数)b[i+1]= ...
- codevs1245最小的N个和 小根堆
这道题 将b排序一下 将a(i~n)和b1加起来入堆 每次出一次队(ax+bi) 将(ax+bi+1)入队就好了 能保证答案的正确性 找个自己证明吧 #include<cstdio> #i ...
- Python 基础总结
1.执行python脚本的两种方式: 答:1../run.py.shell直接调用python脚本 2.python run.py 调用python 解释器来调用python脚本 5.python单行 ...
- [MySQL] 一致性读分析
MySQL MVCC MySQL InnoDB存储引起实现的是基于多版本的并发控制协议---MVCC(Multi-Version Concurrency Control),基于锁的并发控制,Lock- ...