LINK:信用卡凸包 当 R==0的时候显然是一个点的旋转 之后再求凸包即可. 这里先说点如何旋转 如果是根据原点旋转的话 经过一个繁杂的推导可以得到一个矩阵. [cosw,-sinw] [sinw,cosw] 这个矩阵就是旋转矩阵 乘一下当前的坐标 [x,y] 就可以得到逆时针旋转w度的答案. 具体的 x'=xcosw-ysinw; y'=xsinw+ycosw. 顺时针转换一下即可.接下来考虑绕某个点进行旋转. 既然已经得到了绕原点旋转的方法了 此时让要旋转点的坐标减参考系的点的坐标 此时就…
思路 注意到结果就是每个信用卡边上的四个圆心的凸包周长+一个圆的周长 然后就好做了 注意平行时把距离小的排在前面,栈中至少要有1个元素(top>1),凸包中如果存在叉积为0的点也要pop,否则可能会错. 几个简单的向量的式子 \[ a*b=(x_1y_1+ x_2y_2) \] \[ a\times b=(x_1y_2- x_2y_1) \] 逆时针旋转\(\theta\)度 \[ x'=xcos\theta-ysin\theta\\ y'=xsin\theta+ycos\theta \] 代码…
题目大意:有$n$张一模一样的信用卡,每个角进行了圆滑处理,问这些卡组成的“凸包”的周长 题解:发现是圆滑处理的圆心围成的凸包加上一个圆周即可 卡点:输入长宽弄反,然后以为是卡精 C++ Code: #include <algorithm> #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> #define maxn 10010 const doubl…
[BZOJ2829][SHOI2012]信用卡凸包(凸包) 题面 BZOJ 洛谷 题解 既然圆角的半径都是一样的,而凸包的内角和恰好为\(360°\),所以只需要把圆角的圆心弄下来跑一个凸包,再额外加上一个圆的周长就好了. 浮点精度卡不过,洛谷上有人给了一份代码,加上去特判一下就过了... #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespa…
Luogu P2742 模板-二维凸包 之前写的实在是太蠢了.于是重新写了一个. 用 \(Graham\) 算法求凸包. 注意两个向量 \(a\times b>0\) 的意义是 \(b\) 在 \(a\) 的左侧,于是可以用这个方法判断是否弹点. 写的时候注意细节:确定原点时的比较和排序时的比较是不同的,并且排序时不要把原点加入. #include<bits/stdc++.h> using namespace std; #define ll long long #define mp ma…
题意: 给你两个凸包,求其最短距离. 解法: POJ 我真的是弄不懂了,也不说一声点就是按顺时针给出的,不用调整点顺序. 还是说数据水了,没出乱给点或给逆时针点的数据呢..我直接默认顺时针给的点居然A了,但是我把给的点求个逆时针凸包,然后再反转一下时针顺序,又WA了.这其中不知道有什么玄机.. 求凸包最短距离还是用旋转卡壳的方法,这里采用的是网上给出的一种方法: 英文版:        http://cgm.cs.mcgill.ca/~orm/mind2p.html 中文翻译版:  http:/…
这道题的转化很巧妙,可以把信用卡四个角的圆心看做平面上的点来做凸包,\(ans\)就是凸包周长加上一个圆的周长 // luogu-judger-enable-o2 #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e5+100; const double Pi=3.141592653589793…
这个题还是比较有趣. 小心发现,大胆猜想,不用证明! 我们发现所谓的信用卡凸包上弧的长度总和就是圆的周长! 然后再加上每个长宽都减去圆的直径之后的长方形的凸包周长即可! #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int N=40100; const doub…
/* 考验观察法?? 可以发现最终答案等于所有作为圆心的点求出凸包的周长加上一个圆的周长 向量旋转 (x1, y1) 相较于 (x2, y2) 旋转角c 答案是 (dtx * cosc - dty * sinc + x2, dty * cosc + dtx * sinc + y2) 貌似我的凸包也不鲁棒耶 */ #include<cstdio> #include<algorithm> #include<cstring> #include<iostream>…
题目描述 输入 输出 样例输入 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 样例输出 21.66 提示 本样例中的2张信用卡的轮廓在上图中用实线标出,如果视1.5707963268为Pi/2(pi为圆周率),则其凸包的周长为16+4*sqrt(2) 我们先将每个信用卡看成是由四个圆心组成的矩形,那么凸包就是所有圆心形成的凸包.现在每个圆心往外扩展为一个圆,那么就是用凸包来包住所有的圆,而新的凸包的直边部分就是原凸包对应边往外平移得到.对于曲面部…