传送门

题意:给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. [UE4]Menu Anchor,菜单锚点

    一.想要弹出某个菜单的时候,Menu Anchor可以做为菜单弹出的位置. 二.Menu Anchor本身不显示任何东西 三.Menu Class:选择要弹出的UI,可以是任意的UserWidget ...

  2. C#委托防止事件多次注册

    示例代码如下: class NodeInf { public delegate void mydelegate(ProcessContent processContent); private myde ...

  3. k8s学习笔记之二:使用kubeadm安装k8s集群

    一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...

  4. xsyProblem A: 密集子图(graph)

    f[i][S]三进制压缩表示最长路为i,0代表不在该集合,1代表不是最短路为i集合,2代表是最短路集合, 转移枚举i+1集合是那些, 乘以概率即可 预处理保证复杂度 #include<cstdi ...

  5. vue仿淘宝订单状态的tab切换效果

    <div class="navigation">  //这里是通过循环遍历出来的数据,你需要根据index的值来判断你现在点击的是第几个tab栏导航,同时在js中写一个 ...

  6. 3.Jmeter参数化

    1.参数化的三种方式 ${变量} 1 用户定义的变量 2 添加配置元件 CSV Data Set Config ,导入.csv文档 3 利用函数助手中的函数获取参数值     主要用 _Random函 ...

  7. 【Linux】【Selenium】安装Chrome和ChromeDriver的配置

    转自:https://www.cnblogs.com/longronglang/p/8078898.html 1.安装chrome sudo apt-get install libxss1 libap ...

  8. 微信小程序版本管理

    备忘录:<需要修改完善> 打开小程序开发者工具,点击版本管理,点击设置 , 通用更改码云的名字和邮箱 网络认证选择用户名和密码 把密码输入了,点击远程 添加 输入码云的https地址 和仓 ...

  9. uva-10382-贪心

    题意:对于长为L,宽为W的矩形草地,需要对它进行浇水,总共有n个水龙头,给每个水龙头的浇水半径,和位置.求覆盖整个草地需要的最小水龙头数量. 如图,把浇水的面积转换成矩形,然后就和区间覆盖一样了,直接 ...

  10. css:清楚html所有标签自带属性

    相信如果您动手写过网页的话,应该体会到有些标签会自带一些默认的样式,而这些样式或许又是我们不想要的,所以我们可以用以下代码清除所有标签的默认样式   html, body, div, span, ap ...