计算几何
文章平均质量分 70
qingdaobaibai
这个作者很懒,什么都没留下…
展开
-
【bzoj3672】[Noi2014]购票 斜率优化+树链剖分+线段树+凸包+三分
f[i]表示从根到点i的最少票价f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i] } (dep[i]-dep[j]=f[j]-dep[j]*p[i]+dep[i]*p[i]+q[i]f[j]=dep[j]*p[i]+f[i]-dep[i]*p[i]-q[i]f[i]-dep[i]*p[i]-q[i]表示过点(dep[j],f[j])的斜率为p[i]的直原创 2016-03-23 10:50:29 · 754 阅读 · 0 评论 -
【bzoj1610】[Usaco2008 Feb]Line连线游戏 计算几何基础
乱搞,其实开始想用set的#include#include#include#include#include#include#define inf 1e20 using namespace std;double a[100010];double x[210],y[210];int n,m,ans,tot;int main(){ scanf("%d",&n)原创 2016-03-08 10:38:27 · 615 阅读 · 0 评论 -
【bzoj1132】[POI2008]Tro 计算几何
按照横坐标为第一关键字,纵坐标为第二关键字排序,枚举每个点作为原点把再它后面的点拿出来,求每一对点与原点构成的三角形的面积abs(a[i].x*a[j].y-a[i].y*a[j].x)如果能去掉绝对值,就可以用乘法分配律来做了考虑按极角排序从下向上枚举每一个点,那么当前点与每一个前面的点的叉积小于0,与后面的点叉积大于0那么我们边枚举边,记录一个前缀和,每次ans+=原创 2016-03-08 14:16:14 · 582 阅读 · 0 评论 -
【bzoj1914】[Usaco2010 OPen]Triangle Counting 数三角形 计算几何
补集转化总数-不能过原点的三角形我们发现先按照极角排序,然后枚举每个点,这个点与原点连线的一侧任选两个点与这个点围成的三角形都不能过原点那么怎么计算呢?其实按顺序枚举每个点,每个点只计算一遍,则正好不重不漏的计算了每一种情况我们发现只要顺序枚举就可以了,按极角序枚举时,每次向后移一个点,会在原来的点的个数上-1假如枚举到点i,记一个右端点r,在当前节点与原点所在的直线右侧的原创 2016-03-08 21:04:55 · 784 阅读 · 0 评论 -
【bzoj1670】[Usaco2006 Oct]Building the Moat护城河的挖掘 凸包
裸的凸包啦,第一次写。#include#include#include#include#include#include#define maxn 5010 using namespace std;struct yts{ long long x,y;}a[maxn],s[maxn];long long operator*(yts x,yts y){ ret原创 2016-03-09 14:48:23 · 491 阅读 · 0 评论 -
【bzoj1069】[SCOI2007]最大土地面积 凸包+旋转卡壳
旋转卡壳是利用一种奇妙的单调性,比较有意思。枚举一下对角线,旋转卡壳在两边分别找面积最大的三角形。#include#include#include#include#include#include#define maxn 4010 using namespace std;struct yts{ double x,y;}a[maxn],s[maxn];in原创 2016-03-10 16:28:13 · 547 阅读 · 0 评论 -
【bzoj2300】[HAOI2011]防线修建 凸包+set
离线,将删除操作变成插入操作每次插入一个点,要求动态维护凸包set维护,学着用指针迭代器吧插入一个点,依次把两边不符合要求的点删除,用迭代器直接++和--就可以了#include#include#include#include#include#include#include#define maxn 100010using namespace std;原创 2016-03-10 21:22:11 · 741 阅读 · 0 评论 -
【bzoj3203】[Sdoi2013]保护出题人 凸包+三分法
非常好的题目山东二轮前几年还是不错的嘛题解:http://www.cnblogs.com/iwtwiioi/p/4007263.html前i个僵尸的血量和为sum[i]那么第i关的攻击力就是max{(sum[i]-sum[j-1])/(x[i]+i*d-j*d)}(1考虑一下为什么?对于第i只僵尸,可以把前面i-1只僵尸的血量合到第i只上,取最大值已经保证了前i-1只僵原创 2016-03-14 15:01:42 · 798 阅读 · 0 评论 -
【bzoj1492】[NOI2007]货币兑换Cash 斜率优化+set+凸包
斜率优化boss题?首先这道题有一个性质,一定是在一天买进一天卖出,而且全都是倾巢买入卖出先写方程f[i]表示到前i天最多获得多少元f[i]=max{f[j]/(a[j]*rate[j]+b[j])*rate[j]*a[i]+f[j]/(a[j]*rate[j]+b[j])*b[i]}(1f[i]=max{x[j]*a[i]+y[j]*b[i]}=(x[j]*a[i]/原创 2016-03-16 15:10:50 · 764 阅读 · 0 评论 -
【bzoj4311】向量 线段树按时间分治+凸包+三分
好像没什么好说的,记录每个点进出的时刻,每个点对应线段树上的O(logn)个节点,然后按时间分治就可以了。#include#include#include#include#include#include#include#define maxn 200010 using namespace std;struct yts1{ long long x,y;}p[m原创 2016-03-22 19:55:34 · 950 阅读 · 0 评论 -
【bzoj4570】[Scoi2016]妖怪 凸包
二分竟然过不去,真可恶。二分答案,判断每个点是否可行,转换成解二次不等式,在数轴上求交集。TLE正解是凸包。n个点(x,y),在点(x,y)处的斜率为k(k单独使点(x,y)最小,得到的答案为x+y+2*sqrt(xy)求出这n个点的凸包,最大的答案永远在凸包上,每个点作为最大值都有一个斜率k的取值范围,只需求出每个点在这个区间内的最小值即可。如果单独使点i最小的同时,原创 2016-05-20 19:04:01 · 2016 阅读 · 2 评论