bzoj 2829 信用卡凸包(凸包)
2829: 信用卡凸包
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1342 Solved: 577
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
2
6.0 2.0 0.0
0.0 0.0 0.0
2.0 -2.0 1.5707963268
Sample Output
3.333
HINT
本样例中的2张信用卡的轮廓在上图中用实线标出,如果视1.5707963268为Pi/2(pi为圆周率),则其凸包的周长为16+4*sqrt(2)
【思路】
凸包
将一张信用卡看作以四个圆心为顶点的矩形,求出凸包周长后再加一个圆周长。
【代码】
- #include<cmath>
- #include<cstdio>
- #include<vector>
- #include<cstring>
- #include<algorithm>
- #define FOR(a,b,c) for(int a=(b);a<=(c);a++)
- using namespace std;
- const int N = +;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- int dcmp(double x) {
- if(fabs(x)<eps) return ; else return x<? -:;
- }
- struct Pt {
- double x,y;
- Pt(double x=,double y=) :x(x),y(y) {};
- };
- typedef Pt vec;
- vec operator - (Pt a,Pt b) { return vec(a.x-b.x,a.y-b.y); }
- vec operator + (vec a,vec b) { return vec(a.x+b.x,a.y+b.y); }
- bool operator == (Pt a,Pt b) {
- return dcmp(a.x-b.x)== && dcmp(a.y-b.y)==;
- }
- bool operator < (const Pt& a,const Pt& b) {
- return a.x<b.x || (a.x==b.x && a.y<b.y);
- }
- vec rotate(vec a,double x) {
- return vec(a.x*cos(x)-a.y*sin(x),a.x*sin(x)+a.y*cos(x));
- }
- double cross(vec a,vec b) { return a.x*b.y-a.y*b.x; }
- double dist(Pt a,Pt b) {
- return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
- }
- vector<Pt> ConvexHull(vector<Pt> p) {
- sort(p.begin(),p.end());
- p.erase(unique(p.begin(),p.end()),p.end());
- int n=p.size() , m=;
- vector<Pt> ch(n+);
- for(int i=;i<n;i++) {
- while(m> && cross(ch[m-]-ch[m-],p[i]-ch[m-])<=) m--;
- ch[m++]=p[i];
- }
- int k=m;
- for(int i=n-;i>=;i--) {
- while(m>k && cross(ch[m-]-ch[m-],p[i]-ch[m-])<=) m--;
- ch[m++]=p[i];
- }
- if(n>) m--;
- ch.resize(m); return ch;
- }
- int n;
- double a,b,r;
- vector <Pt> p,ch;
- int main() {
- scanf("%d%lf%lf%lf",&n,&b,&a,&r);
- a-=*r , b-=*r; a/= , b/=;
- double x,y,ang,ans=;
- FOR(i,,n) {
- scanf("%lf%lf%lf",&x,&y,&ang);
- Pt o=Pt(x,y);
- p.push_back(o+rotate(vec(-a,-b),ang));
- p.push_back(o+rotate(vec(-a,b),ang));
- p.push_back(o+rotate(vec(a,-b),ang));
- p.push_back(o+rotate(vec(a,b),ang));
- }
- ch=ConvexHull(p);
- n=ch.size();
- FOR(i,,n-)
- ans+=dist(ch[i],ch[i+]);
- ans+=dist(ch[n-],ch[]);
- ans+=*PI*r;
- printf("%.2lf",ans);
- return ;
- }
bzoj 2829 信用卡凸包(凸包)的更多相关文章
- BZOJ 2829 信用卡凸包 ——计算几何
凸包裸题 #include <map> #include <cmath> #include <queue> #include <cstdio> #inc ...
- 【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 凸包
思路: 把信用卡周围去掉 只剩下中间的长方形 最后的答案加上一个圆 //By SiriusRen #include <bits/stdc++.h> using namespace std ...
- BZOJ2829信用卡凸包——凸包
题目描述 输入 输出 样例输入 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 样例输出 21.66 提示 本样例中的2张信用卡的轮廓在上图中用实线标出 ...
- luogu P3829 [SHOI2012]信用卡凸包 凸包 点的旋转
LINK:信用卡凸包 当 R==0的时候显然是一个点的旋转 之后再求凸包即可. 这里先说点如何旋转 如果是根据原点旋转的话 经过一个繁杂的推导可以得到一个矩阵. [cosw,-sinw] [sinw, ...
- bzoj 1964: hull 三维凸包 计算几何
1964: hull 三维凸包 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 54 Solved: 39[Submit][Status][Discuss ...
- 【bzoj2829】信用卡凸包 凸包
题目描述 输入 输出 样例输入 26.0 2.0 0.00.0 0.0 0.02.0 -2.0 1.5707963268 样例输出 21.66 题解 凸包 傻逼题,答案显然为:所有圆心构成的凸包周长+ ...
- 【BZOJ 1027】 (凸包+floyd求最小环)
[题意] 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金 ...
- bzoj 4570: [Scoi2016]妖怪 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...
随机推荐
- openwrt opkg update wget returned 4 wget returned 1
最近在正捣鼓mt7620芯片的路由器,刷入openwrt Pandora系统以后想装wifidog实现web认证. 我用我自己的一个水星的路由器PPPOE拨号,通过水星的lan口连接网线到我openw ...
- margin系列之内秀篇
本系列摘自 飘零雾雨的博客 最Cool的利器 一样东西在不同的场景,不同的人手里,所能做的事会有很大不同.我深切的以为 margin 绝对是 CSS 中最有能力的利器之一,不知大家以为然否? 前面几 ...
- Yii 跨域设置
控制器设置: abstract class ControllerBase extends Controller { public function __construct($id, $module, ...
- Python冒泡排序
冒泡排序,顾名思义,按照一定的规则,把数据一直排下去 直接上代码 import random def bubblesort(data): for i in range(len(data)-1,1,-1 ...
- git push用法和常见问题分析
在使用git 处理对android的修改的过程之中总结的.但不完善 Git push $ git push origin test:master // 提交本地test分支作为远程的m ...
- 树莓派上搭建基于Python+web.py+fastcgi+lighttpd的网站
最近在网上淘了一个树莓派,什么是树莓派?这里是他的官方网站你可以去看看. 简单的说就是一块使用了ARM11的CPU,具有256MB或512MB内存的具有两个USB接口,一个RJ45接口,HDMI输出和 ...
- 1.MVC框架开发(初识MVC)
1.约定大于配置 Content:存放静态文件(样式表.静态图片等) Controllers:存放控制器类 Models:存放数据模型文件 Scripts:存放脚本文件 Views:存放视图文件,里面 ...
- bzoj3677: [Apio2014]连珠线
Description 在列奥纳多·达·芬奇时期,有一个流行的童年游戏,叫做“连珠线”.不出所料,玩这个游戏只需要珠子和线,珠子从1到礼编号,线分为红色和蓝色.游戏 开始时,只有1个珠子,而接下来新的 ...
- 类集对enum的支持。
1,EmumMap public class EnumMap<K extends Enum<K>,V>extends AbstractMap<K,V>impleme ...
- java项目打成jar包时引用了第三方jar,此时我们该如何解决呢
Web项目做多了,反而对单纯的java项目陌生了,今天我们在开发项目的过程中,碰到一个这样的需求:需要将java项目放到linux系统上跑起来,当然这个javaSE项目是带main方法的.我们知道在I ...