传送门

题意:给nnn个A∗BA*BA∗B的矩形,其中每个矩形的四个角被改造成了半径为rrr的四分之一 圆,问这些矩形的凸包周长。


思路:考虑求出圆心的凸包周长然后加上一个整圆的周长,证明很简单,略掉。

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=10005;
struct pot{
    double x,y;
    friend inline pot operator+(const pot&a,const pot&b){return (pot){a.x+b.x,a.y+b.y};}
    friend inline pot operator-(const pot&a,const pot&b){return (pot){a.x-b.x,a.y-b.y};}
    friend inline double operator^(const pot&a,const pot&b){return a.x*b.y-a.y*b.x;}
    friend inline bool operator<(const pot&a,const pot&b){return a.x==b.x?a.y<b.y:a.x<b.x;}
    inline double mod(){return sqrt(x*x+y*y);}
}a[N<<2];
int n,tot=0,q[N<<2],top=0;
double A,B,R,ans,a1,a2,a3,a4,D;
const double pi=acos(-1.0),eps=1e-8;
inline void graham(){
    n=tot;
    sort(a+1,a+n+1);
    q[++top]=1;
    for(ri i=2;i<=n;++i){
        while(top>1&&((a[q[top]]-a[q[top-1]])^(a[i]-a[q[top-1]]))<=0)--top;
        q[++top]=i;
    }
    for(ri lim=top,i=n-1;i;--i){
        while(top>lim&&((a[q[top]]-a[q[top-1]])^(a[i]-a[q[top-1]]))<=0)--top;
        q[++top]=i;
    }
    for(ri i=1;i<top;++i)ans+=(a[q[i]]-a[q[i+1]]).mod();
}
int main(){
    scanf("%d%lf%lf%lf",&n,&A,&B,&R);
    A=A/2-R,B=B/2-R;
    a1=atan(A/B),a2=pi-a1,a3=pi+a1,a4=-a1;
    D=sqrt(A*A+B*B);
    ans=R*pi*2.0;
    for(ri i=1;i<=n;++i){
        double x,y,theta;
        scanf("%lf%lf%lf",&x,&y,&theta);
        a[++tot]=(pot){cos(theta+a1)*D+x,sin(theta+a1)*D+y};
        a[++tot]=(pot){cos(theta+a2)*D+x,sin(theta+a2)*D+y};
        a[++tot]=(pot){cos(theta+a3)*D+x,sin(theta+a3)*D+y};
        a[++tot]=(pot){cos(theta+a4)*D+x,sin(theta+a4)*D+y};
    }
    graham();
    printf("%.2lf",ans);
    return 0;
}

2019.02.21 bzoj2829: 信用卡凸包(凸包)的更多相关文章

  1. 2019.02.21 bzoj2300: [HAOI2011]防线修建(set+凸包)

    传送门 题意:动态维护凸包周长. 思路: 见这篇求面积的吧反正都是一个套路. 代码: #include<bits/stdc++.h> #define int long long #defi ...

  2. 2019.02.21 bzoj5317: [Jsoi2018]部落战争(凸包+Minkowski和)

    传送门 题意:qqq次询问把一个凸包整体加一个向量(x,y)(x,y)(x,y)之后是否与另外一个凸包相交. 思路:转化一下发现只要会求A+B={v⃗=a⃗+b⃗∣a⃗∈A,b⃗∈B}A+B=\{\v ...

  3. 2019.02.21 bzoj1249: SGU277 HERO 动态凸包(set+凸包)

    传送门 题意:动态插入点,维护凸包面积. 思路:用setsetset维护极角序来支持面积查询即可. 然后注意选原点的时候要从初始三个点随机平均系数来避免精度误差. 代码: #include<bi ...

  4. 2019.02.21 bzo1038: [ZJOI2008]瞭望塔(半平面交)

    传送门 题意:给出一个nnn个点的轮廓,要求找一个高度最小的点使得它能够看见所有拐点. 思路:之间建半平面交然后取半平面交上的每个交点和每个轮廓更新答案即可. 代码: #include<bits ...

  5. 2019.02.21 bzoj2739: 最远点(决策单调性+分治)

    传送门 题意简述:给一个N个点的凸多边形,求离每一个点最远的点. 思路:先根据初中数学知识证明决策是满足单调性的,然后上分治优化即可. 才不是因为博主懒得写二分+栈优化呢 代码: #include&l ...

  6. [BZOJ2829] 信用卡 (凸包)

    [BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...

  7. FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM

    FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM T.. = Timeline support 支持时间轴 .S. = Slice t ...

  8. http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

    http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

  9. 2019.3.18考试&2019.3.19考试&2019.3.21考试

    2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 哇说的简单,码了将近一下午终于码出来了 感觉自己码力/写题策略太糟糕了,先是搞了一个细节太多的写法最后不得不弃疗了,然后第二 ...

随机推荐

  1. 支持flash in Chrome 2017

    在设置页面: chrome://settings/content 修改Flash插件的使用方式为:Allow sites to run Flash 来源: https://helpx.adobe.co ...

  2. vue+窗格切换+田字+dicom显示_03

    环境:vue+webpack+cornerstone ide:vs code 需求:窗格设置+拼图设置 代码: 主体:printPage.vue <div class="div mid ...

  3. vim相关

    保存和传递宏 1 先建立一个宏.如上 2 在任意一个文件的空白位置normal状态下,命令"ap 即可以把宏的内容显示出来.比如说我的宏是: "ohello th id<80 ...

  4. 两个时间点计算相隔几年,几个月,几天-java

    本文采用Calendar 实现 ,当然也可以用java8提供的愉快且方便的时间处理- LocalDate import java.text.ParseException; import java.te ...

  5. PHP/TP5 接口设计中异常处理

    PHP提供 Exception 类来处理异常 new Exception('错误信息(默认为空)','错误代码(默认0)','异常链中前一个异常') 然后可以通过 e -> getMessage ...

  6. 去BAT,你应该要看一看的面试经验总结(转)

    来源微信公众号『easyserverdev』 http://mp.weixin.qq.com/s/UZljzFMjobo1wzCguY7NDg 说下我的面试经验吧,都是亲身经历,不喜勿喷: 我去年12 ...

  7. Java Bug -- java.util.ConcurrentModificationException

    java.util.ConcurrentModificationException at java.util.ArrayList$ArrayListIterator.next(ArrayList.ja ...

  8. Match-----Correlation-----find_ncc_model_exposure

    * This example program shows how to use HALCON's correlation-based* matching. In particular it demon ...

  9. 2018年秋季学期面向对象程序设计(JAVA)课程总结

    2018年秋季学期面向对象程序设计(JAVA)课程总结 时值2018年年末,按惯例对本学期教学工作小结如下: 1. 教学资源与教学辅助平台 教材:凯 S.霍斯特曼 (Cay S. Horstmann) ...

  10. Django_Form验证(一)

    Django为我们提供了一个模板来做Form验证,不需要我们再去写复杂的验证代码了 简单的提交信息html页面: <form action="/fff/Form" metho ...