摘要:题意: 在二维平面上,给定n个人 每个人的坐标和移动速度v 若对于某个点,只有 x 能最先到达(即没有人能比x先到这个点或者同时到这个点) 则这个点称作被x占有,若有人能占有无穷大的面积 则输出1 ,否则输出0思路: 1、把所有点按速度排个序,然后把不是最大速度的点去掉 剩下的点才有可能...
阅读全文
摘要:Graham-Scan法序的选取1.选取最低点中最左的一个作为参考点 用叉乘来排序所有点的相对位置时间复杂度排序O(nlog n)扫描O(n)总的是O(nlog n)Graham-Scan法的特殊情况重复点 删除共线点 对于不要求求共线点的情况,可以对叉乘做严格的判定。 对于要求求共线点的...
阅读全文
摘要:1、质量集中在顶点上 n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ∑mi 特殊地,若每个点的质量相同,则 X = ∑xi / n Y = ∑yi / n 2、质量分布均匀 特殊地,质量均匀的三...
阅读全文
摘要:转载学习:#include #include #include #include #include using namespace std;const double EPS = 1e-9;const int MAXN = 40;struct Point3 //空间点{ double x, y, z; Point3( double x=0, double y=0, double z=0 ): x(x), y(y), z(z) { } Point3( const Point3& a ) { x = a.x; y = a.y; z ...
阅读全文
摘要:半平面交的O(nlogn)算法(转载)求n个半平面的交有三种做法:第一种就是用每个平面去切割已有的凸多边形,复杂度O(n^2)。第二种就是传说中的分治算法。将n个半平面分成两个部分,分别求完交之后再将两个相交的区域求交集。由于交出来的都是凸多边形,利用凸多边形的交可以在O(n...
阅读全文
摘要:#include#include#define Max 55#define eps 1e-8int n,m;struct Point{ double x,y;}c[Max],b[Max];double dis(Point p1,Point p2){ return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);}int equ(Point p){ int i; double x; double _Min=dis(p,b[0]); int k=0;//¼Ç¼baseϱ
阅读全文
摘要:http://www.bnuoj.com/bnuoj/contest_show.php?cid=1605#problem/17966#include<stdio.h>#include<math.h>int main(){ int _case; int x1,x2,y1,y2,a,b,c; double x,xp,xm,xn,ym,yp,yn; double su; scanf("%d",&_case); while(_case--) { scanf("%d %d %d %d %d %d %d",&x1,&y
阅读全文
摘要:计算几何入门不久,大家相互学习探讨!题意: 给定N个互不相交的圆,告诉圆心的坐标和半径,求一个圆的半径,要求这个圆的圆心与N个圆中的某一个的圆心重合,并且这个圆至少要覆盖每个圆的一半,求满足条件的最小半径。思路(baudu+小结): 既然圆心是某个圆的圆心,那么我们可以枚举圆心,只是半径怎么求呢?我们可以用二分的思想找到半径,依次求出每个圆心上满足条件的圆的半径,再取一个min值即为所求。 两圆相离、外切、内切、内含都好断定,然则相交情况如何断定面积,参考网址http://www.cnblogs.com/evan-oi/archive/2012/03/14/2395989.html#i...
阅读全文