随笔分类 - 几何
摘要:107EDarts题目:给出n个矩形,问落在n个矩形交的部分的概率分析:裸的多边形面积并。代码略。。
阅读全文
摘要:对于动态凸包添加的问题的一般做法: 如上图。我们知道,如果能够有一种数据结构可以维护一下凸包上的顶点与原点的角度,对于插入一个点now的时候,我们就可以二分出点的位置,然后找到比他角度小的上一个顶点pre以及比他角度大的下一个顶点next,通过判断now跟next,pre的叉积正负来判断点now是否在凸包内。 对于需要插入不在凸包中的点时,我们找出了pre,next之后,需要分别通过维护上凸包以及下凸包,把多余的点从平衡树中删掉。例如上图中,由于next_next可以被now“看见”,所以next需要被删掉,删掉next之后继续判断next_next是否需要删掉,直到不能够删掉为止。对于下..
阅读全文
摘要:177. Squaretime limit per test: 2.5 sec.memory limit per test: 65536 KBinput: standardoutput: standardYou have given the square NxN on a checkered sheet. Size of each cell is 1x1, (1, 1) is leftmost top corner and (N, N) is rightmost bottom corner.Initially all cells are white.There are M repainting
阅读全文
摘要:代碼如下#include <set>#include <map>#include <cmath>#include <queue>#include <stack>#include <string>#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typed
阅读全文
摘要:题目: 给出n个凸包,现在要用炸弹炸毁固定的坐标,被攻击的坐标所在的凸包会被毁灭, 现在问你被毁灭的凸包的面积分析: 求凸包+求多边形面积#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int X = 105;#define debug puts("here");int top,n,a[X];bool use[X];struct no
阅读全文
摘要:/* * 253. Theodore Roosevelt * 题目:给出一个逆时针的凸包,然后再给出m个点,问这m个点是否至少有k个点在凸包里面 * (包括在边界上) * 分析:O(n)的询问方式肯定TLE,所以我们可以像做动态凸包那种方式用set或者splay来维 * 护一个极角序,二分询问的那个点的极角,然后再用叉积判断即可。我们可以时刻用极角序维护一个凸包的点集。我们插入点pos的时候,我们可以计算出pos的极角,然后二分出pos的位置(pos的极角恰好为p[i],p[i+1]中间)。然后判断叉积det(pos,p[i+1],p[i])是否新插入的点在凸包中。 * * ...
阅读全文
摘要:/*题目: 给出n个铜件,每个铜件拥有银和金的含量si,gi,然后问最终把这些铜件融在一起后 银的含量为m,然后问金的含量大概有多少分析: 将金银映射为坐标,将银的含量表示为x轴的坐标,然后金的含量表示为y轴,然后求 凸包,接着做垂直于x轴的直线,交凸包于两点,那两点即为所求,若没有的话,直接 输出0 注意: 1.点都在凸包上的直线 2.点在凸包上的点 3.点不在凸包上的范围内 4.求出的两点大小相反*/#include <iostream>#include <cstdio>#include <cstring>#include <cm...
阅读全文
摘要:/*题目: 给出n个矩形的坐标,求所有的矩形的覆盖面积分析: 离散化,具体请看Matrix67 http://www.matrix67.com/blog/archives/108*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int X = 205;double x[X],y[X];int topx,topy;int n;double lx[X],rx[X],ly[X],ry[X];bool
阅读全文
摘要:/*2011 北京区域赛Hou Yi's secret题目: 给出n个点,问任选三个点组成的三角形中最多有多少个相似分析: 能够组成三角形的话,点不能重复,不能三点共线,然后相似的判断可根据对应边 的比值相等,由于边的长度涉及浮点运算,我们可以不开方直接用平方作比较就行*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int X = 20;const int maxn = 8000;in
阅读全文
摘要:/*题目: 给出一个点的坐标以及以它为半径的半圆,现给出所有的零散的点的坐标,问最多半圆能覆盖的点的数目分析: 先预处理完所有的点到圆心的距离,然后排序得到所有可以在整个圆上的点,再枚举其中一个点作为 半圆的一条半径,再用叉积分>=0和<=0分成两类,判断这两个与答案的最大值,更新后输出答案*/#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;#define MAXN 160#define esp 1e
阅读全文
摘要:/*题目: 求两线段是否重合、平行或相交分析: 利用叉积运算很容易算出来,我们可以先判断是否是平行的,只需将每一段线段向量化,再与另一个 向量做叉积运算,若为0即平行或重合,判断是否重合,只需找其中一个向量与该向量的一端与另一向量 的一端组成的向量做叉积运算,为0即为重合。 不平行的话,那么在本题中有一个交点,可以求到两线段分别所在的直线(ax+by+c=0),然后联立方程解出 x,y即可(这是我自己做的方法,可能有些漏洞,网上有很多模板)*/#include <iostream>#include <cstdio>#include <cmath>using
阅读全文