• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
tmeteorj
Nothing is so big that it is impossible to get over, and hurt only serves to make us stronger. 没有什么事是大到无法战胜的,痛苦也只会让我们变得更加坚强。
博客园 | 首页 | 新随笔 | 新文章 | 联系 | 订阅 订阅 | 管理

随笔分类 -  ACM 计算几何

 
POJ 2966
摘要:题意:多边形(可凹可凸)为雷区,雷区边上或外面有两点A,B,问从A到B且不经过雷区里面(可以在边上)的最短距离。题解:多边形至多有100个点,加上A,B共102个点,任意连线,判断这个线段是否经过多边形内部,将那些不经过内部的线段加入到图中,最后求A到B的最短路。View Code 1 #include<cstdlib> 2 #include<cmath> 3 #include<cstring> 4 #include<cstdio> 5 #include<algorithm> 6 #define max(a,b) (((a)>( 阅读全文
posted @ 2012-10-24 14:15 tmeteorj 阅读(415) 评论(0) 推荐(0)
POJ 3347
摘要:题意:变长不同的n个正方形,斜45度按顺序平放在坐标轴上,尽量靠左但不能跃出x=0,问从上往下看,哪些正方形是可见的。题解:1、假如前i-1个正方形位置都确定了,那么可以让第i个正方形与前i-1个正方形每个都计算一次它如果和它相依靠的话左边坐标的值,然后取一个最大的便是这个正方形的左端点位置。 2、对于j<i的正方形,如果i的边长大于j那么j的最右能看到的部分就不会比i的最左端点大,反之,i的最左能看到的部分就不会比j最右端点小。 3、通过第2步筛选,将那些最左能看到的端点比最右能看到端点大或等于的去掉,剩下的就是所要求的。View Code 1 #include<cstdio&g 阅读全文
posted @ 2012-10-19 14:42 tmeteorj 阅读(659) 评论(1) 推荐(2)
POJ 1788
摘要:题意:给一个什么东西修围墙,只能修水平或者竖直的那种,然后每个拐点都会告诉你坐标,求最后围墙长度。题解:由于围墙只有横竖,可以分两次每次统计横的或者竖的的总长度,统计方法就是按照如x坐标排序,求相邻x坐标相等的两个点间的y的差值。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 struct data 6 { 7 int x,y; 8 }po[101000]; 9 bool compx(data a,data b)10 阅读全文
posted @ 2012-10-19 11:38 tmeteorj 阅读(248) 评论(0) 推荐(1)
POJ 3129
摘要:题意:三维空间里面有n颗星星,另有m个望远镜,朝向与张角知道了,问能看到多少个星星。题解:算出每个星星与望远镜朝向的夹角,在与望远镜张角比较一下便知道能否看到了。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 const double eps=1e-8,pi=acos(-1.0); 7 struct point 8 { 9 double x,y,z;10 }po[600 阅读全文
posted @ 2012-10-10 19:37 tmeteorj 阅读(324) 评论(0) 推荐(0)
POJ 2137
摘要:题意:n(<=100)头牛各自有s(<=40)个自己喜欢的地方,FJ要把它们用绳子连成一个圈,但是每头牛都要在自己喜欢的地方之一才行,问FJ最少要用多长的绳子才行。题解:有于数据都比较小,所以可以dp[i][j][k]代表第i头牛在j处吃草时第1头牛在k处的最小绳子,最后答案等于dp[n][i][j]+dist(0,j,n,i)的最小值。转移是s的复杂度,最后就是O(n*s^3)View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include< 阅读全文
posted @ 2012-10-08 21:27 tmeteorj 阅读(389) 评论(8) 推荐(0)
POJ 1034
摘要:题意:主人带狗去散步,主人走n个点,狗在每个点都会与主人碰头,但其余时候都是各自溜达,除此之外,狗还会去找一些有趣的地方(共m个),每次离开主人狗最多去一个有趣的地方。狗的速度最快是人的两倍,求使得狗到达最多有趣点的方法。题解:对于人从第i个点到第i+1个点,这条路作为三角形的一边c,然后遍历其他点,若j与这两个点组成的边即为a,b如果a+b<=c则g[i][j]=true,然后做二分图最大匹配,就是狗最多能到的点。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 阅读全文
posted @ 2012-10-08 20:09 tmeteorj 阅读(381) 评论(0) 推荐(0)
POJ 2722
摘要:题意:给一个角和一些正方形,用正方形去把角封住,要求被封住的面积最大。题解:面积最大的时候,所有正方形的对角线必定练成一条直线然后与角相交,如原题的图中就可以把正方形沿着角向外平移一些直到正方形对角线共线,此时达到移动的临界点。接着就是数学公式推导,用三角形内角和180,正弦定理,平行线确定的一些角相等便可以退出公式。公式比较长,可以一步步运算出来。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 using nam 阅读全文
posted @ 2012-10-03 13:03 tmeteorj 阅读(274) 评论(0) 推荐(1)
POJ 2641
摘要:题意:在b*a的区域打台球,初始位置在中点,s秒之后,与水平边撞击n次,与垂直边撞击m次,并回到中点,求球的初速度与角度。题解:球的水平速度设为Vx,那么s秒后水平路程为Vx*s,与垂直边撞击m次又回到中点,由此得到水平路程为m*a,于是Vx*s=m*a,同理Vy*s=n*b,两式联立得答案。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 const double pi=acos(-1.0); 6 int main() 7 阅读全文
posted @ 2012-10-03 10:39 tmeteorj 阅读(160) 评论(0) 推荐(0)
POJ 2666
摘要:题意:海上有地方发生爆炸,一个人与主船脱离,他想回到主船上去。爆炸的冲击波会使得主船沿着爆炸点到它的方向以V的速度远离,人有种装置确定主船位置,但是必须保证他到爆炸点的距离与船到爆炸点的距离一样,人的速度为2V,当前他们距离爆炸点的距离为D,人与船对于爆炸点的夹角为Θ,求人回到船的时间,如果大于10000,就输出"God help me!"。题解:为了保证人和船时时刻刻与爆炸点距离相等,所以人的径向速度也应为V,那么切向速度就是√3V,在t时刻,他到爆炸点的距离为D+tV,于是在dt时间内,他旋转的角速度就是(√3V)/(D+tV),角度为(√3V)/(D+tV)*dt=d 阅读全文
posted @ 2012-10-02 20:28 tmeteorj 阅读(163) 评论(0) 推荐(0)
POJ 2059
摘要:题意:s*s的正方形上有n个点,求一个圆将它们覆盖但不超出正方形,要求圆的x坐标尽可能小,其次y坐标尽可能小。题解:数据范围太小,直接暴力。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int po[60][2]; 6 int s,n; 7 bool solve(int x,int y) 8 { 9 int len=min(min(x,y),min(s-x,s-y));10 len=len*len;11 for(i 阅读全文
posted @ 2012-10-01 14:20 tmeteorj 阅读(232) 评论(0) 推荐(0)
POJ 2812
摘要:题意:给一个多边形柱体的底边形状和体积,求它的高。题解:叉积求面积,再用体积除以面积。View Code 1 #include<cstdlib> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #define max(a,b) (((a)>(b))?(a):(b)) 6 #define min(a,b) (((a)>(b))?(b):(a)) 7 #define sign(x) ((x)>eps?1:((x)<-eps?(-1):(0))) //符号 阅读全文
posted @ 2012-09-24 19:04 tmeteorj 阅读(255) 评论(0) 推荐(0)
POJ 1408
摘要:题意:给一个1*1的正方形,然后每条边上有n个点,按照一定规律连线把矩形切成(n+1)^2个小四边形(方式不好描述,直接看题吧),求这里面面积最大的小四边形。题解:求四边形面积可以直接用叉积公式,然后用两个扫描线,记录相邻的两条线上组成四边形的所有的点,计算之后,靠右的扫描线变成新的扫描线组的左边的线。View Code 1 #include<cstdlib> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #define max(a,b) (((a)>(b))?(a 阅读全文
posted @ 2012-09-21 17:29 tmeteorj 阅读(153) 评论(0) 推荐(0)
POJ 2526
摘要:题意:给出n个点,判断是否有中心对称点。题解:排序,验证View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 struct point 6 { 7 int x,y; 8 bool operator<(const point &ne)const 9 {10 if(x!=ne.x)11 return x<ne.x;12 else13 return y<ne.... 阅读全文
posted @ 2012-09-17 19:19 tmeteorj 阅读(190) 评论(0) 推荐(0)
POJ 1254
摘要:题意:给两个点的x,y坐标以及当前点与他们的角度,求当前点的位置。题解:每一个点的坐标与角度可以构成一条直线,然后求两直线交点。View Code 1 #include<cstdlib> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #define max(a,b) (((a)>(b))?(a):(b)) 6 #define min(a,b) (((a)>(b))?(b):(a)) 7 #define sign(x) ((x)>eps?1:((x)< 阅读全文
posted @ 2012-09-14 19:39 tmeteorj 阅读(217) 评论(0) 推荐(0)
POJ 3432
摘要:给一些点找正方形,其实就是枚举每两个点所形成的线段看它是否能和其它点组成正方形,将所有的点存在hash表里,然后枚举两个点,算出它能生成的正方形的另外两点的坐标,如果都在hash表里,则说明这两点连线能够生成一个正方形。另外,在考察每一个正方形,共有四条边,也就是说它在运算过程中被算了四次,最后ans再除以4便是答案。View Code 1 import java.util.*; 2 import java.math.*; 3 class Main 4 { 5 static int x[]=new int[2500]; 6 static int y[]=new int[250... 阅读全文
posted @ 2012-09-01 11:00 tmeteorj 阅读(274) 评论(0) 推荐(0)
POJ 2508
摘要:直接将圆锥展开变成扇形,用比例算出夹角,再用余弦定理算出答案即可。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const double eps=1e-8,PI=acos(-1.0);int main(){ double r,h,l,p1,p2,th1,th2,dt; while(scanf("%lf%lf%lf%lf%lf%lf",&r,&h,&p1,&th1,&am 阅读全文
posted @ 2012-08-30 13:20 tmeteorj 阅读(197) 评论(0) 推荐(0)
 

公告


博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3