计算几何
Hillan_
An OIer From ZJ
展开
-
几何求面积
计算几何中求多边形面积是一个很基础的算法,我们知道,两条线段的叉积等于这两条由同一端点引出线段所围成三角形的面积。那么三角形的面积即可由此计算。多边形(凸)内部也可以分出许多个三角形,由此我们可以计算出多边形的面积。 那么各位oier可能想问,凸多边形可以这样求,那么傲多边形呢?别急,我们先来画一个图。如下图,将计算到的面积涂色,得出的结果还是这样,这是为什么呢? d原创 2015-11-13 18:15:35 · 635 阅读 · 0 评论 -
TYVJ1360Imperishable Shooting
题解里有讲先进行排序再插入平衡树 当然另取一个点作为基点更容易#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #define youhua __attribute__((optimize("O2"))) using namespac原创 2016-04-22 14:27:03 · 688 阅读 · 0 评论 -
BZOJ2391: Cirno的忧郁
和前面一样只不过rank变成了sum Splay维护的东西改一下#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> using namespace std; char c; bool flag; inline void read(int原创 2016-04-22 16:25:11 · 437 阅读 · 0 评论 -
BZOJ3533: [Sdoi2014]向量集
APIO张鑫同学跟我说的 现在才填好坑 求出当点Pi优于Pj的条件 发现直接线段树节点上建上下凸壳然后二分就好了#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; #define ll long long char c;原创 2016-07-05 12:48:24 · 526 阅读 · 1 评论 -
BZOJ3839: [Pa2013]Działka
卡时限过去 (多刷几次就好啦凸壳分成四块 扫描线加线段树处理边界点 根据预处理的边界点之间凸壳面积计算面积计算以原点为三角形的第三个节点 注意每一块面积对答案的贡献是正的还是负的 这题居然花了我一天时间#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; #原创 2016-06-30 17:51:25 · 612 阅读 · 0 评论 -
BZOJ1338: Pku1981 Circle and Points单位圆覆盖
提供一个暴力的想法 极大肯定是两个点在圆周上 然后O(n3)O(n^3)暴力吧卡卡常数就过了好吧。。。 其实有个O(n2lgn)O(n^2lgn) 的解法 主要思路就是对于每个点求包含这个点的最被包含点集 具体看爱神Blog http://blog.csdn.net/acm_cxlove/article/details/7894310#include<cstdio> #include<i原创 2016-04-24 09:29:42 · 639 阅读 · 0 评论 -
BZOJ3716: [PA2014]Muzeum
一开始是懵逼的 因为不知道最大闭合子图能贪心 这个贪心是源于这个图的性质为了方便计算我们需要吧每个守卫的视角做成直角 且两边平行于xy轴 然后根据y降序排序依次将守卫插入并将每个的手办贡献减一下就好了 实在不理解看代码#include<cstdio> #include<algorithm> #include<iostream> #include<set> #include<queue> #原创 2016-02-21 10:51:52 · 822 阅读 · 0 评论 -
BZOJ1132: [POI2008]Tro
鬼畜的BZOJ。。。换个输出就A?!!! 叉积的前缀和方法#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std; #define youhua __attribute__((optimize("O2"))) struct Point原创 2016-02-16 11:26:54 · 429 阅读 · 0 评论 -
BZOJ1074: [SCOI2007]折纸origami
很裸的一道计算几何对吧 每一个询问我们就只需要易操作将他展开就好了。。 很显然爆搜中可以删几个不可能的中途状态点 时间上界是 2n∗m2^n*m的 然后我是在linux打的。。。调戏了很久毛了搬到Windows上才发现是一个double打成了int。。。。。各种不爽#include<cstdio> #include<iostream> #include<cstdio> #include<se原创 2016-01-23 17:17:09 · 784 阅读 · 0 评论 -
bzoj2395: [Balkan 2011]Timeismoney 最小乘积生成树
这一题很好 。。 数形结合 看题解。。。。 http://www.cnblogs.com/autsky-jadek/p/3959446.html 只能% 代码: #include #include #include #include using namespace std; char c; #define ll long long inline void read(ll &原创 2016-01-04 20:16:42 · 477 阅读 · 0 评论 -
BZOJ3571: [Hnoi2014]画框
和前面那道最小乘积生成树是差不多的 都是先确定上下界然后在做 每次都去用KM做当前值了 然后就不贴代码了原创 2016-01-04 20:39:24 · 524 阅读 · 0 评论 -
关于凸包:grahman scan
二维凸包问题(其实还有三维的,但是这里不做研究)是一类关于一个平面上有n个点,让你连接最少的点使给出的所有点在被划定的区域里。如图1: scan" />,这就是一个最优的解。 下面我们开始介绍求解方法之一:graham scan、。 首先我们得知道两个有相同起点的矢量(假设p1-->p2, p1-->p3)的叉积的正负(叉积公式:(p2.x-p1.x)*(p3.y-p1原创 2015-11-13 18:15:33 · 571 阅读 · 0 评论 -
计算几何————洛谷P1222 三角形
题目大意: 给出一些点要你判断一条直线上最多可能有几个点 思路: 本来觉得求叉积可能会超时,毕竟n《=700,但是直到(我膝盖中了一箭)我写出叉积的程序交上去后才发现居然没有超时。。。。。。 核心代码: int cj(int xx,int y,int z) { return (x[y].x-x[xx].x)*(x[z].y-x[x原创 2015-11-13 18:15:30 · 856 阅读 · 0 评论 -
BZOJ4219: 跑得比谁都快
惨啊 常数垫底啊 三角剖分后上最小生成树#include<cstdio> #include<iostream> #include<set> #include<algorithm> #include<cmath> #include<queue> using namespace std; #define New(a,b) __typeof__(b) a=(b) #define x first #de原创 2016-08-07 09:09:45 · 1037 阅读 · 0 评论