BZOJ 2829 凸包
思路:
把信用卡周围去掉 只剩下中间的长方形
最后的答案加上一个圆
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
const double eps=1e-;
int card,n,m,k;
double a,b,r,xx,yy,theta,Ans;
struct Point{
double x,y;Point(){}
Point(double X,double Y){x=X,y=Y;}
}point[N],tubao[N];
bool cmp1(Point a,Point b){if(abs(a.x-b.x)>eps)return a.x<b.x;return a.y<b.y;}
double cross(Point a,Point b,Point c){
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
double dis(Point a,Point b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main(){
scanf("%d%lf%lf%lf",&card,&a,&b,&r);
Ans+=*acos(-)*r;
a=a-*r,b=b-*r;
for(int i=;i<=card;i++){
scanf("%lf%lf%lf",&xx,&yy,&theta);
point[++n]=Point(xx-sin(theta)*a/-cos(theta)*b/,yy+cos(theta)*a/-sin(theta)*b/);
point[++n]=Point(xx-sin(theta)*a/+cos(theta)*b/,yy+cos(theta)*a/+sin(theta)*b/);
point[++n]=Point(xx+sin(theta)*a/-cos(theta)*b/,yy-cos(theta)*a/-sin(theta)*b/);
point[++n]=Point(xx+sin(theta)*a/+cos(theta)*b/,yy-cos(theta)*a/+sin(theta)*b/);
}
sort(point+,point++n,cmp1);
for(int i=;i<=n;i++){
while(m>&&cross(tubao[m],point[i],tubao[m-])<eps)m--;
tubao[++m]=point[i];
}k=m;
for(int i=n-;i;i--){
while(m>k&&cross(tubao[m],point[i],tubao[m-])<eps)m--;
tubao[++m]=point[i];
}
for(int i=;i<m;i++)Ans+=dis(tubao[i],tubao[i+]);
printf("%.2lf\n",Ans);
}
BZOJ 2829 凸包的更多相关文章
- 【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 ...
- BZOJ 2829 信用卡凸包 ——计算几何
凸包裸题 #include <map> #include <cmath> #include <queue> #include <cstdio> #inc ...
- bzoj 2829 计算几何
将每张卡四个角的圆心跑graham出正常凸包,再加上一个圆就好了. 要注意先输入的是x,找点时三角函数瞎换就过了.. #include<cstdio> #include<cstrin ...
- bzoj 1069 凸包+旋转卡壳
题目大意 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成 的多边形面积最大. 分析 枚举对角线的一个端点 另一个端点开始转 转的时候求出对角线左边面积 ...
- bzoj 3203 凸包+三分
题目大意 具体自己看吧link 读入n,D,表示n关 大概就是第i关有i只僵尸排成一队来打出题人 最前面那只是编号为\(i\)的僵尸,最后面的一只是编号为\(1\)的僵尸 最前面的僵尸离出题人\(X_ ...
- BZOJ 2300凸包+离线
思路: 倒着加显然吧 动态维护这个凸包就好了 //By SiriusRen #include <bits/stdc++.h> using namespace std; ; int n,m ...
- BZOJ 4140 凸包+二进制分组
思路: $(x_0-x)^2+(y_0-y)^2<=x^2+y^2$ $y>=(-x_0/y_0)x+(x_0^2+y_0^2)/2y0$ 这显然就是凸包了 以一个斜率不断向下(上)走 ...
- bzoj 4311 向量 时间线建线段树+凸包+三分
题目大意 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 分析 按时间线建线段树 大致 ...
随机推荐
- chrome浏览器安装网页测试插件postman的图文介绍
用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介绍的这款网页调试工具不仅可以 ...
- 【jenkins】UnicodeEncodeError: 'ascii' codec can't encode character
https://stackoverflow.com/questions/6076203/how-do-you-set-the-default-encoding-in-jenkins
- 利用 Python 批量修改文件名
开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干! 1 函数介绍 1.1 os 模块 (1)os.lisdir() >>> import os >>> ...
- Python selenium chrome打包exe后禁用控制台输出滚动日志
Python selenium chrome打包exe后,在运行的过程中,如果遇到需要input()输入时,会发现被不断滚动刷新的日志把命令行输入快速顶掉了,通过查阅资料不断实践,发现以下方法有效: ...
- Springboot druid监控配置
@Configuration public class DataSourceConfig { @Bean public ServletRegistrationBean statViewServlet( ...
- 自定义Realm
[单Realm] 1) jar包 2) 实现自定义Realm public class RealmOne implements Realm{ /** * 获取基本类名 */ @Override pub ...
- JavaSE 学习笔记之Jdk5.0新特性(十九)
Jdk5.0新特性: Collection在jdk1.5以后,有了一个父接口Iterable,这个接口的出现的将iterator方法进行抽取,提高了扩展性. --------------------- ...
- 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...
- nyoj_278_排队_201403282135
排队 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 周末了,软件ACM的队员准备玩玩游戏,娱乐一下,CY想了一个好主意,所有队员站成一个圈,从1开始报数,凡是报出指 ...
- sql-server-storage-internals
https://www.simple-talk.com/sql/database-administration/sql-server-storage-internals-101/