几何问题
文章平均质量分 61
ZXLS-ZMR
我喜欢编程喜欢学习新的知识
展开
-
平面划分。
一条直线能够将平面分成2部分,两条直线能够将平面分成4部分,而对于一条“V”型线而言,平面被分成2部分,两条“V”型线最多能够将平面分成7部分。对于椭圆封闭曲线对平面的划分又将不一样,任意两个椭圆至多有两个交点。现在给定一个N,你能够计算出三种不同情况下,空间最多被划分出多少个部分吗?若干组测试数据,每组测试数据占一行,每行一个正整数N(1每组数据输出一行,每行3个整数,之间用原创 2013-04-14 13:13:08 · 1180 阅读 · 0 评论 -
HDU-2993 二分-至少连续k个平均值最大(数形结合)
题目连接分析讲解题意:在n个序列中找出至少k个连续的数,使它们平均值最大,输出最大的值。题意转化:用sum()求出前n个数的和,那么p=(sum(j)-sum(i-1))/(j-i+1) ,j-i>=k+1;把sum(i)看做y轴的值,i看做x轴的值,由于ai>0;所以图形是:一条递增的凹凸不平的折线。那么问题就是:在这条折线上找出横坐标的值至少相差k,他们的之间的连线斜率最大原创 2013-09-11 20:53:31 · 1248 阅读 · 0 评论 -
POJ 1375 数学几何题
简单几何题,画个图形就可以得到结果了。连接#include#include#include#include#includeusing namespace std ;struct line{ double l,r;}L[1000];bool operator <(const line &a,const line &b){ return a.l<b.l;}int原创 2013-09-02 21:20:21 · 651 阅读 · 0 评论 -
poj 3990 四边形费马点
到网上查一下,四边形的费马点就: 如果是凸四边形,就是对角线的交点。 如果是凹四边形,就是该凹点。本来很简单,由于粗心,先是这样想的:枚举四个点的距离,再算出对角线的距离,取最小就行了,这样是错的,必须要判断凸包问题,在分别求。#include#include#include#includeusing namespace std ;struct node{原创 2013-09-08 18:03:28 · 1796 阅读 · 0 评论 -
POJ 2954 pick定理
详细分析pick定理:#include#include#include#includeusing namespace std;int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}int main(){ int Area,b,ans; int x[4],y[4]; while(1){原创 2013-09-02 18:38:01 · 533 阅读 · 0 评论 -
POJ-1385 多边形重心
分析:将多边形进行三角形划分,计算每个三角形的重心,再将重心以每个三角形的面积为权重进行加权平均即可得到多边形的重心。#include#include#includeusing namespace std ;struct node{ double x,y;}p[1000001];double cx,cy;int n;double cross(node a,node原创 2013-09-01 21:50:08 · 663 阅读 · 0 评论 -
poj 3348 包凸求面积
这题很好的把叉积的性质应用到了。此题简单,模板题:#include#include#includeusing namespace std ;struct node{ int x,y;}p[10005],rec[10005];int n;double cross(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(b.y-原创 2013-09-01 20:19:05 · 651 阅读 · 0 评论 -
POJ 1654 Area 多边形面积
此题虽然简单,但精度问题可能会让人WA。#include#include#includeusing namespace std ;struct node{ int x,y;}p[1000005];double cross(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}int原创 2013-08-31 16:21:03 · 565 阅读 · 0 评论 -
zoj-2559 The Smart Bomb 简单几何
可以看出:最大的三个圆正好只可能是在三角形最小两个边只和。设有r1,r2,r3为三个圆的半径,d1,d2,d3,是三角形的边,且d3是最长的边。则有:r1+r2=d1,r2+r3=d2;====>r1-r3=d1-d2;又因:r1+r3代入:r1=(d1+d3-d2)/2.代入即可求得其他两个圆的半径。代码:#include #include#includeusing原创 2013-09-06 11:18:07 · 901 阅读 · 0 评论 -
HDU-2036 多边形的面积
简单的几何入门题。把多边形划分成n-2个三角形,然后叉积的一半就是一个三角形的面积,相加就可以了。#includestruct node{ int x,y;}p[105];double count(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}int main(){ int原创 2013-08-31 11:58:58 · 661 阅读 · 0 评论 -
poj 2318-几何二分搜索
题意:有n个直线,把矩形((x1,y1)->(x2,y2))(对角线的坐标)划分n+1块,告诉你n条直线的两端坐标。有m个玩具,给出它的坐标,问你每个区间的玩具个数。分析:根据题意给出的直线告诉了我们y轴坐标。因为x轴可以知道(x1,yi),(x2,yi)。由于直线是不会相交的。那么区间直线的x值是递增的。所以可以二分:根据两点式: (x-x1)/(x原创 2013-08-17 11:05:42 · 633 阅读 · 0 评论 -
POJ-1696 极坐标排序
先不会,后来看了discus才知道,用极坐标排序,换句话说,按着偏转的角度从小到大,相同的按距离从小到大。最后形成的路线是一个螺旋形的折线。#include#includeusing namespace std;struct node { int id,x,y;}p[105];node rec[105];int pos,cnt;int Judge(node a,nod原创 2013-08-20 14:02:38 · 782 阅读 · 0 评论 -
POJ-2653 Pick-up sticks(线段相交)
题意:一次投放一条木棍,问投放n次夹在上面的木棍有多小,并按顺序输出。按顺序判断线段相交,水题一个。代码:#include#define eps 1e-8using namespace std;struct node{ double x,y;}point[400005];int rec[1005];int cnt;double Judge(node a,node原创 2013-08-19 21:30:26 · 665 阅读 · 0 评论 -
poj 3304-Segments 线段相交的判断
题目连接题意:有n条线,是否存在一条直线使得它们在这条直线上的投影至少有一个公共交点。题意可以转化为:去任意两个点组成的线段与所有的线段相交。分析:判断两线段是否相加:可以用向量法。如果两直线相加则必定有一条线段的两个端点位与另一线段的两侧,那就有: 设p1p2 ,q1q2两线段相交:(p1-q1)X(q1-q2)*(p2-q1)X(q1-q2)>=0,注意’X‘是叉积,原创 2013-08-17 19:55:25 · 591 阅读 · 0 评论 -
POJ-1556 线段相交的判断与最短路(几何+图论)
题意:在10*10的房间里,有些墙,问你从源点(0,5)到对面的点(10,5)的最短路,不能穿过墙。分析:或许看到了最短路,这题大概就有思路了,到我还是有点疑问,”为什么最短的路一定要从墙的端点过去,有没有存在一条路径从某一点(不在这些点)使它能直接到达目的地“?而这些点是有可能的。但我听别人说过端点就行了,我也不再去追究了。如果是过端点,那就好办了,由于点不多,枚举所以可能的原创 2013-08-19 16:12:24 · 743 阅读 · 0 评论 -
几何题-求圆柱最大体积
点击打开链接总是把问题看的太复杂,还以为是三分查找。这题根本没这个必要。只要使圆周刚好与边相等就行了,矩形中最大的圆就是取最小边作为直径就行了。再分别以两边为高,比较就行了。水啊!代码:#include#include#includeusing namespace std;const double pi=acos(-1.0);int main(){ double原创 2013-05-30 22:21:51 · 1290 阅读 · 0 评论 -
HDU-1007 最近点对
这题,我用模板竟然WA了,不知道是自己敲错了没有。分析:一种显而易见的方法就是枚举所有的点,并计算最小值,该方法的时间复杂度为n^2,显然这题不可取。另一种方法就是基于分治思想,可以再nlogn的时间内求解。将给定的点集按照y轴方向分成左右两个部分。那么,就要两种可能:1,最小值的两个点是在同一集合,或者分别位于两侧。不妨设px位于左侧,py位于右侧,设dl,dr分别为左右两个原创 2013-09-04 20:20:37 · 748 阅读 · 0 评论