几何
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[扫描线 计算几何] BZOJ 1845 [Cqoi2005] 三角形面积并
%%%PoPoQQQ:http://blog.csdn.net/popoqqq/article/details/42581881经典的扫描线首先求出所有直线交点的横坐标,排序,去重然后对于每个横坐标,两段之间夹的部分一定是一个或多个梯形因此我们取中位线,求出中位线被所有三角形覆盖区间的区间并的长度,即可计算出这部分的面积#includ原创 2016-03-18 20:08:41 · 1098 阅读 · 0 评论 -
[几何 分治] BZOJ 2928 [Poi1999]飞弹 Rockets
算导上的经典问题n2logn啊 卡来卡去 卡时过 main上过不去 TLE每次找到两个点I,j连一条边,使它们连线左边黑点=白点,右边黑点=白点,然后对左右递归处理即可。由数学归纳法可证这样一定有解。时间复杂度关键在于划分的平衡性,以及找连线的复杂度未想到如何快速Devide#include#include#inclu原创 2016-12-17 11:07:01 · 478 阅读 · 0 评论 -
[最小乘积生成树 分治] BZOJ 2395 [Balkan 2011]Timeismoney
丢下题解就走:http://www.cnblogs.com/autsky-jadek/p/3959446.html贴吧的讨论:http://tieba.baidu.com/p/3357839800#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;t原创 2016-07-04 18:37:09 · 659 阅读 · 0 评论 -
[线性规划 对偶 凸包 三分] Codeforces 605C #335 (Div. 1) C. Freelancer's Dreams
很显然的线性规划 对偶一下 maximum p∗x+q∗yai∗x+bi∗y<=1maximum\ p*x+q*y \\ ai*x+bi*y<=1 这个肯定是半平面交出一个凸包然后用直线去切 直接三分就好了 有点需要精度//ai*x+bi*y<=1 max p*x+q*y#include<cstdio>#include<cstdlib>#include<algorithm>usi原创 2017-02-07 17:09:13 · 825 阅读 · 0 评论 -
[凸包 三分 数形结合] BZOJ 3203 [Sdoi2013]保护出题人
可以发现yi=MAXj<=i{sum[i]−sum[j−1]x[i]+(i−j)∗d}y_i=MAX_{j<=i} \{ {{sum[i]-sum[j-1]} \over {x[i]+(i-j)*d}} \} 这个东西是个斜率的形式 (x[i]+i∗d,sum[i])(x[i]+i*d,sum[i])和(sum[j−1],j∗d)(sum[j-1],j*d) 可以发现斜率最大一定在凸包上原创 2017-02-16 12:03:52 · 371 阅读 · 0 评论 -
[凸包最大内接圆 二分 半平面交] POJ 3525 Most Distant Point from the Sea
二分答案 然后半平面向内缩 判断是否有交#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef double ld;const double eps=1e-7;inline int sgn(ld a){ if (fabs(a)<eps) return 0原创 2017-02-16 12:07:08 · 474 阅读 · 0 评论 -
[圆的反演] HDU 4773 Problem of Apollonius
反演详见ACdreamer的blog反演的基本性质 不过反演中心的一条直线反演成一个过反演中心圆 反之亦然不过反演中心的一个圆反演成另一个不过反演中心的圆那题目就很显然了先把两个圆反演 变成两个圆 在求公切线 再反演回去可能用到的几何方法两圆的公切线两个相交圆的交点最后上几张图 #include<cstdio>#include<cstdlib>#include<algorith原创 2017-02-28 07:41:07 · 504 阅读 · 0 评论 -
[半平面交对偶凸包] BZOJ 1007 [HNOI2008]水平可见直线
半平面交对偶转凸包问题 神奇的新姿势 还有待研究#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(原创 2017-02-14 10:28:46 · 505 阅读 · 0 评论 -
[半平面交 模板题] BZOJ 3199 [Sdoi2013]escape
先用半平面交构出V图 然后连边bfs一通最短路 一个点的控制范围是和其他点的中垂线组成的半平面交#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<vector>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using name原创 2017-02-14 10:31:06 · 436 阅读 · 0 评论 -
[半平面交 随机增量法] BZOJ 2732 [HNOI2012]射箭
设抛物线为y=ax2+byy=ax^2+by 那么一个限制y1<=ax2+by<=y2y_1<=ax^2+by<=y_2 转化为b<=−ax+y2xb>=−ax+y1xb<=-ax+{y_2 \over x} \\ b>=-ax+{y_1 \over x} 然后就是一个关于a b的半平面交 这个直接上模板就行了 据说加强的数据是一些半平面交是点 直线 线段 射线 之类的边界情况 我lon原创 2017-02-14 10:40:55 · 753 阅读 · 0 评论 -
[几何 two-pointers] BZOJ 1278 向量vector
有一个结论就是组成答案的向量一定都在某一直线的一侧 证明:以答案向量作一个圆 这条直线就是过终点的切线#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ld;struct PP{ ld x,y; double ang; P原创 2017-03-17 20:43:05 · 810 阅读 · 0 评论 -
[几何] BZOJ 2710 [Violet 1]追风者 & POJ 3924 Tornado
好神的几何题 把一个点不动作为参照物 然后就变成了只有一个点在动 画出来就是这样然后就是求 一个点到两组平行线段的距离最小值#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef double ld;inline ld sqr(ld x){ return原创 2017-03-09 11:56:09 · 655 阅读 · 0 评论 -
[几何] BZOJ 1132 [POI2008]Tro
裸的做是 O(n3)O(n^3) 按极角排序后 用分配律 就可以 O(n2logn)O(n^2 \log n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int N=3005;struct PP{ in原创 2017-03-13 13:55:52 · 316 阅读 · 0 评论 -
[几何] BZOJ 4814 [Cqoi2017]小Q的草稿
把三角形拆成三条线段 以每个点为中心 极角排序一发 然后扫描线 set中维护线段 优先级为到中心点的距离 因为三角形不相交 所以大小关系不会变 遇到一个点就查一下最近的线段是不是挡住了 不然就有贡献 其实三角形对于一个点 只有一条边是有用的#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#includ原创 2017-04-21 08:14:55 · 981 阅读 · 0 评论 -
[几何 LIS] BZOJ 3663 Crazy Rabbit & 4660 Crazy Rabbit & 4206 最大团
膜一发题解 问题转化为直线上有一些区间,选出尽量多的区间使得它们两两之间”相交但不包含” 考虑最终方案中选出来的所有区间中左端点最小的一个,因为区间两两之间有公共部分所以这个区间内必须包含其他所有区间的左端点.那么我们枚举这个左端点最小的区间,只把其他区间中左端点在这个区间内的区间拿出来,按左端点排序后对右端点跑LIS,就可以保证选出来的区间有公共部分而且不包含.复杂度为O(n2logn)原创 2017-04-21 08:24:04 · 594 阅读 · 0 评论 -
[几何 模拟退火 || 随机增量法] Codeforces 442E #253 (Div. 1) E. Gena and Second Distance
怎么都在理性愉悦啊 总算做到一道有点思路的题了官方题解 题解里说的是什么呢 我们先二分答案AnsAns 然后我们考虑AnsAns合法的条件是存在一个圆OO 他只包含其中一个特殊点 我们肯定可以挪动这个圆 使得有至少一个点在边界上 枚举点pp在边界上 那么圆心OO就在以pp为圆心的圆CC上 圆心OO合法的条件是不存在其他点到他的距离 ≤Ans\leq Ans 实际上就是C的圆周上的不被任原创 2017-03-14 11:20:08 · 1384 阅读 · 0 评论 -
[几何 扫描线 最大子段和] JOI Open Contest 2017 Bulldozer
题目大意:给出平面上n个带权点,有正有负,求平面上两条平行直线之间的点权和最大是多少 VIEW PROBLEM - BULLDOZER (JOI17_BULLDOZER)直接枚举斜率,点按照距离排序后是一个最大子段和问题 然后考虑扫描线旋转斜率,两个点相对关系变化只会发生在斜率与两点连线平行的情况,那么两点位置swap一下,更一般的如果是一段都满足这个,那么这一段要reverse一下 就是把两原创 2017-07-05 07:50:00 · 552 阅读 · 0 评论 -
[模型转化 最长下降子序列] BZOJ 2924 [Poi1998]Flat broken lines
将坐标系向左旋转45度,那么折线就要求x,y均不降,以x为第一关键字,y为第二关键字排序,那么一条折线就对应一个不降子序列。根据最小链覆盖=最长反链,故求出最长下降子序列的长度即可#include#include#includeusing namespace std;const int N=30005;struct abcd{ int x,y; void re原创 2016-12-17 11:25:22 · 424 阅读 · 0 评论 -
[数学 几何] 51Nod 1512 向量翻转 & Codeforces #79 (Div. 1 Only) 101C Vectors
可以发现ABC其实都可以旋转 转来转去无非是变幻下坐标系那么我们设D为C旋转后的向量 B0B1B2B3为旋转后的xiangliang那么就是判断 A+xC+yD=B0/B1/B2/B3 是否有整数解 注意些细节#include#include#include#define X first#define Y secondusing namespace std;type原创 2016-11-25 20:25:40 · 677 阅读 · 0 评论 -
[扫描线 树链剖分 树状数组] BZOJ2758 [SCOI2012]Blinker的噩梦
扫描线 一般扫描线的做法就是想象一根线向某个方向扫过,进入的进入,出去的出去,用一个set维护序列或是结合线段树,当然最恶心的就是加上计算几何但是落实到这题上就是各种鬼畜乱搞,只能膜大神省选前做难题的结果是——到处翻题解,程序越改越像“题意:平面上有n个多边形(凸包和圆)。任意两个多边形AB只有两种关系:(1)A包含B或者B包含A;(2)AB的公共面积为0。每个多边形有一个原创 2016-03-18 20:25:36 · 1465 阅读 · 0 评论 -
[几何 递推] BZOJ 1074 折纸
吾不言#include#include#includeusing namespace std;int n,m;double px[15],py[15],qx[15],qy[15];inline int dcmp(double a,double b){ if (fabs(a-b)<=1e-6) return 0; if (a<b) return -1; return 1;原创 2016-03-13 20:07:01 · 466 阅读 · 0 评论 -
[二分答案 随机增量法] BZOJ 2280 [Poi2011]Plot
狂T 只能去%Po姐 http://blog.csdn.net/popoqqq/article/details/45100989直接上二分是不可取的,因为我们要求m次,如果每次都验证一遍[1,n/2]直接就炸了我们可以这么搞首先判断[pos,pos+1-1]是否满足要求然后判断[pos,pos+2-1]是否满足要求然后判断[pos,pos+4-1原创 2016-07-12 19:39:18 · 716 阅读 · 0 评论 -
[乱搞 几何] BZOJ 4614 [Wf2016]Oil
一开始想复杂了 想到网络流去了一定有一条卡住两个端点的直线是最优解。所以枚举一个端点,以它为极坐标原点后其他每个线段覆盖了一个角度区间。#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if原创 2016-06-22 20:30:48 · 752 阅读 · 0 评论 -
[平衡树动态维护凸包] BZOJ 2300 [HAOI2011]防线修建
就是叉积乱搞 set水过#include#include#include#include#include#includeusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,原创 2016-05-29 21:34:01 · 758 阅读 · 0 评论 -
[CDQ分治 凸包] BZOJ 2961 共点圆
%%% PoPoQQQ :http://blog.csdn.net/PoPoQQQ/article/details/42318247“题目大意:给定平面,多次插入点和圆,每次插入点时询问当前插入的点是否在之前插入的所有圆中并且至少在一个圆中直接用数据结构维护这些点和圆不是很好写,我们考虑CDQ分治对于每层分治,我们需要对于[mid+1,r]中的每个点求出[l,mid原创 2016-04-18 18:41:44 · 478 阅读 · 0 评论 -
[最小乘积匹配 分治 KM] BZOJ 3571 [Hnoi2014]画框
类似最小乘积生成树的做法详见另一文:http://blog.csdn.net/u014609452/article/details/51822880#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef pair abcd;inlin原创 2016-07-04 18:40:05 · 482 阅读 · 0 评论 -
[几何] BZOJ 4246 两个人的星座
Po姐说考虑两个三角形,如果这两个三角形相离,那么一定可以做出两条内公切线,否则做不出来 枚举一个点,以这个点为中心按极角序枚举另一个点,连接这两个点作出一条公切线,那么这两个三角形分别分布在这条线的两端,统计出两侧每种颜色的点之后乘法原理即可 #include#include#include#include#include#define cl(x) memset(x原创 2016-06-29 16:33:36 · 823 阅读 · 0 评论 -
[DP 可并堆维护凸包优化] BZOJ 4585 [Apio2016]烟火表演
垂死梦中惊坐起,膜拜神犇王梦迪#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread原创 2016-08-28 18:42:59 · 1936 阅读 · 0 评论 -
[旋转卡壳] BZOJ 1185 [HNOI2007]最小矩形覆盖 && 2218 Uva10173 Smallest Bounding Rectangle
感动死了 一年前卡精度 今天搞搞搞就过了感天动地一年前的代码真丑1185#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))#define eps 1e-6using namespace std;typedef long double ld;inline i原创 2016-08-30 21:25:17 · 423 阅读 · 0 评论 -
[极大化 极角排序] POJ 1981 Circle and Points & BZOJ 1338 Pku1981 Circle and Points单位圆覆盖
必然卡在一个点上 然后剩余每个点对应极角区间#include #include #include #include #include #include #include using namespace std; const int N=200005;struct Point{ double x,y; Point(double x=0,d原创 2016-08-23 18:15:13 · 643 阅读 · 0 评论 -
[几何] UR #16 B.破坏蛋糕
详见官方题解#include#include #include #include #include#include#define dprintf(...) fprintf(stderr,__VA_ARGS__)using namespace std; typedef long long ll; typedef long double ld;const ld原创 2016-09-16 13:36:53 · 406 阅读 · 0 评论 -
[补集转化 有序化去重] Ural 1212 Battleship
论文:许智磊--浅谈补集转化思想在统计问题中的应用可以发现这道题长度极小 总数极小 转化为总数减去有相交去重可以运用有序化的思想 如何排除这种重复计数呢?我们采用一种排除重复的常用方法:有序化。也就是设法对于新矩形的一种摆放方案,只在处理与它相交的编号最小的已有矩形时才允许计入总数T。例如图七中,如果我们规定左边的黑色矩形编号较小,则在处理右边的黑色矩形时,与它相交原创 2016-12-12 19:13:37 · 397 阅读 · 0 评论 -
[复数 解析几何 || 随机化] Ural 1046 Geometrical Dreams & POJ 2600 Geometrical dreams
这个可以先设出a1 然后 一圈递推出an+1 an+1==a1 解这个方程就好了这里用复数来实现 因为复数乘法是天然的旋转 复数旋转就是类似这样的东西以下来自 POJ Discusspoint getnp(point ori, point cen, double angle) //向量cen->ori绕cen旋转逆时针旋转angle弧度{ //复数平面向量旋转 poin原创 2016-12-04 20:48:44 · 417 阅读 · 0 评论 -
[二分 几何] BZOJ 2289 【POJ Challenge】圆,圆,圆
%%%fhq http://fanhq666.blog.163.com/blog/static/81943426201131691852787/这题的算法:二分相交部分的横坐标。用一条直线x=x0和所有圆计算交点,如果有的圆不和它相交,易知交集和直线的左右关系。如果所有圆和直线的相交的部分的交集非空,那么输出yes。如果某两个圆和直线的相交部分不相交,那么这两个圆的交点原创 2016-07-28 08:32:57 · 810 阅读 · 0 评论 -
[Simpson积分 || 圆的离散化 几何] BZOJ 2178 圆的面积并
不知道正解为何物:http://mojijs.com/2015/09/206783/index.html直接套用Simpson 函数值是一些线段的并#include#include#include#include#define PI acos(-1.0)#define eps 1e-13using namespace std;typedef pair abcd;i原创 2016-04-16 13:20:41 · 859 阅读 · 0 评论 -
[圆的离散化 几何] POJ 1688 Dolphin Pool
调了一天半 就是过不去 心累 先挖个坑吧论文:高逸涵《与圆有关的离散化方法》#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long double ld;typedef pair abcd;const ld原创 2016-12-06 13:43:11 · 1077 阅读 · 1 评论 -
[几何] Codeforces 772B VK Cup 2017 - Round 2 B. Volatile Kite
那么问题来了 O(n)O(n)判到底对不对#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef double ld;struct P{ ld x,y; void read() { double _x,_y; scanf("%lf%lf",&_x,&_y); x=_x; y=_y;原创 2017-06-13 22:39:49 · 496 阅读 · 0 评论