题目大意:有$n$张一模一样的信用卡,每个角进行了圆滑处理,问这些卡组成的“凸包”的周长

题解:发现是圆滑处理的圆心围成的凸包加上一个圆周即可

卡点:输入长宽弄反,然后以为是卡精

C++ Code:

#include <algorithm>
#include <cstdio>
#include <cmath>
#include <iomanip>
#include <iostream>
#define maxn 10010
const double Pi = acosl(-1);struct Point {long double x, y;Point() { }Point(long double __x, long double __y) : x(__x), y(__y) { }inline long double operator ^ (const Point &rhs) const {return x * rhs.y - y * rhs.x;}inline Point operator + (const Point &rhs) const {return Point(x + rhs.x, y + rhs.y);}inline Point operator - (const Point &rhs) const {return Point(x - rhs.x, y - rhs.y);}inline Point rotate(long double theta) {const long double Sin = sinl(theta), Cos = cosl(theta);return Point(x * Cos - y * Sin, x * Sin + y * Cos);}
} s[maxn << 2], O, v[maxn << 2];
inline long double abs2(const Point &x) { return x.x * x.x + x.y * x.y; }
inline long double dis(const Point &lhs, const Point &rhs) { return sqrtl(abs2(lhs - rhs)); }
inline long double det(const Point &O, const Point &lhs, const Point &rhs) {return (lhs - O) ^ (rhs - O);
}
inline bool cmp(const Point &x, const Point &y) {static Point X, Y; X = x - O, Y = y - O;static long double tmp; tmp = X ^ Y;return (tmp > 0) || (tmp == 0 && abs2(X) < abs2(Y));
}int n, tot;
long double ans, A, B, R;
int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);std::cin >> n >> A >> B >> R; ans = 2 * R * Pi;A /= 2, B /= 2, A -= R, B -= R;for (int i = 0; i < n; ++i) {static long double x, y, theta;std::cin >> x >> y >> theta;const Point t1 = Point(B, A).rotate(theta), t2 = Point(B, -A).rotate(theta), O(x, y);s[tot++] = O - t1, s[tot++] = O + t1;s[tot++] = O - t2, s[tot++] = O + t2;}int miny = 0;for (int i = 0; i < tot; ++i)if (s[i].y < s[miny].y || (s[i].y == s[miny].y && s[i].x < s[miny].x)) miny = i;std::swap(s[0], s[miny]); O = s[0];std::sort(s + 1, s + tot, cmp);n = tot, tot = 3;v[0] = s[0], v[1] = s[1], v[2] = s[2];for (int i = 3; i < n; ++i) {Point *a = v + tot - 2, *b = v + tot - 1;while (tot > 2 && det(*a, *b, s[i]) <= 0) {--tot, --a, --b;}v[tot++] = s[i];}for (int i = 1; i < tot; ++i) ans += dis(v[i - 1], v[i]);ans += dis(v[0], v[tot - 1]);std::cout << std::fixed << std::setprecision(2) << ans << '\n';return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10361478.html

[洛谷P3829][SHOI2012]信用卡凸包相关推荐

  1. 洛谷 P4557 战争:凸包+闵可夫斯基和

    题意: 给出两个凸包AAA和BBB,有若干询问,每次给出一个向量V=(x,y)V = (x,y)V=(x,y),将BBB按照VVV的方向平移到B′B'B′,然后回答AAA和B′B'B′是否相交. 题解 ...

  2. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  3. 旋转卡壳简介(POJ2187)(洛谷P1452)

    读音 word上是这么读的: 前置技能 凸包 算法用途 旋转卡壳可以在O(n)O(n)O(n)的时间内确定一对对踵点对,它的用途包括但不限于:计算距离(凸多边形直径).计算外接矩形(最小面积/周长). ...

  4. 洛谷 CF311B Cats Transport

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 CF311B Cats Transport 题目 题目描述 Zxr960115 is owner of a large farm. H ...

  5. 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)

    洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...

  6. 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)

    洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...

  7. 洛谷首页代码(百度编译器)

    洛谷是一个国内著名编程网站:分享一下他首页的未登录源代码: ​ <!DOCTYPE html> <html class="no-js" lang="zh ...

  8. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  9. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

最新文章

  1. 数据分析之Pandas缺失数据处理
  2. Merry Christmas Happy New Year!!
  3. php报错:找不到php_pdo_oci.dll模块
  4. JS:javaweb——a标签实现跳转并打开新窗口
  5. 在 SAP BTP 平台 Neo 环境里使用 SAP Cloud SDK 创建应用
  6. 【计算机心理学】先设计再实现 在实现中完善设计
  7. java程序报错后跳过继续执行_java笔记.基础篇.基本数据类型
  8. dataframe动态命名(读取不同文件并规律命名)
  9. php tiff 转 png,tif/tiff图片格式转换器批量jpg、png、jpeg格式转tif/tiff格式
  10. python降低图像分辨率_python如何更改图像像素
  11. 声纹技术(三):声纹识别技术
  12. java中关于json传图片的方法
  13. 对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序
  14. 总是封群怎么解决_我的群被封了怎么办
  15. 数据挖掘之关联分析Apriori算法
  16. 电信、网通、铁通各地DNS
  17. 华为最新鸿蒙消息,华为鸿蒙系统最新消息,华为鸿蒙系统2021
  18. IMU-TL740D的运行及相关资料
  19. 330页PDF,10万字的知识点总结,吊打面试官系列!
  20. 如何查看spring版本

热门文章

  1. Linux系统编程9:进程入门之操作系统为什么这么重要以及它是如何实现管理的
  2. Callgrind:调用图生成缓存和分支预测分析器
  3. C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)
  4. 数据库系统中数据抽象的三级结构
  5. LeetCode 221 最大正方形
  6. 12. OD-XOFTSPY监控系统软件,通过windows API进行破解(双重验证,聪明的加密师)
  7. C#设置系统日期时间格式
  8. UVa11292 - Dragon of Loowater (贪心+模拟)
  9. LeetCode 链表的插入排序
  10. System.ComponentModel.Component : MarshalByRefObject, IComponent, IDisposable