博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj2829】信用卡凸包 凸包
阅读量:4549 次
发布时间:2019-06-08

本文共 1751 字,大约阅读时间需要 5 分钟。

题目描述

输入

输出

样例输入

2

6.0 2.0 0.0
0.0 0.0 0.0
2.0 -2.0 1.5707963268

样例输出

21.66


题解

凸包

傻逼题,答案显然为:所有圆心构成的凸包周长+一个圆的周长。这里求凸包用的方法是求上下两个凸壳再拼起来。

时间复杂度为排序的 $O(n\log n)$ 

我才不会告诉你puts("nan:)可以过呢

#include 
#include
#include
using namespace std;const double pi = acos(-1);struct data{ double x , y; data() {} data(double a , double b) {x = a , y = b;} data operator-(const data &a)const {return data(x - a.x , y - a.y);} double operator*(const data &a)const {return x * a.y - y * a.x;} bool operator<(const data &a)const {return x == a.x ? y < a.y : x < a.x;}}p[40010] , sa[40010] , sb[40010];int ta , tb;inline double dis(data a , data b){ return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));}int main(){ int n , i , m = 0; double a , b , r , x , y , c , ans = 0; scanf("%d%lf%lf%lf" , &n , &a , &b , &r) , a = a / 2 - r , b = b / 2 - r; for(i = 1 ; i <= n ; i ++ ) { scanf("%lf%lf%lf" , &x , &y , &c); p[++m] = data(x + b * cos(c) + a * sin(c) , y + b * sin(c) - a * cos(c)); p[++m] = data(x - b * cos(c) + a * sin(c) , y - b * sin(c) - a * cos(c)); p[++m] = data(x + b * cos(c) - a * sin(c) , y + b * sin(c) + a * cos(c)); p[++m] = data(x - b * cos(c) - a * sin(c) , y - b * sin(c) + a * cos(c)); } sort(p + 1 , p + m + 1); for(i = 1 ; i <= m ; i ++ ) { while(ta > 1 && (p[i] - sa[ta]) * (sa[ta - 1] - sa[ta]) >= 0) ta -- ; while(tb > 1 && (p[i] - sb[tb]) * (sb[tb - 1] - sb[tb]) <= 0) tb -- ; sa[++ta] = sb[++tb] = p[i]; } for(i = 1 ; i < ta ; i ++ ) ans += dis(sa[i] , sa[i + 1]); for(i = 1 ; i < tb ; i ++ ) ans += dis(sb[i] , sb[i + 1]); printf("%.2lf\n" , ans + dis(sa[1] , sb[1]) + dis(sa[ta] , sb[tb]) + 2 * pi * r); return 0;}

 

 

转载于:https://www.cnblogs.com/GXZlegend/p/8565265.html

你可能感兴趣的文章
服务器发送邮件出现Could not connect to SMTP host错误 解决办法
查看>>
sklearn.preprocessing.LabelBinarizer
查看>>
C teaching
查看>>
分隔指定内容,提取章节数
查看>>
this point
查看>>
leetcode 30 Substring with Concatenation of All Words
查看>>
验证登录信息是否合法
查看>>
线程池
查看>>
git版本控制器的基本使用
查看>>
Redis 笔记与总结4 set 和 zset 类型
查看>>
jQuery Ajax 回调函数中调用$(this)的问题 [ 转 ]
查看>>
thymeleaf:字符串拼接+输出单引号
查看>>
springboot:集成fastjson(教训)
查看>>
网络流 Edmons-Karp 算法讲解
查看>>
「NOIP2018模拟9.10」公约数 - 找规律 - gcd
查看>>
使用java理解程序逻辑(15)
查看>>
bzoj 1879 状压dp
查看>>
python 一些特殊用法和坑
查看>>
WIFI密码破解全攻略
查看>>
c++string各种函数
查看>>