摘要:
http://poj.org/problem?id=1328X轴的上方代表海,下方代表陆地。海中有多个岛屿,X轴上可任意放置半径为d的雷达,求至少放置多少个雷达可覆盖所有岛屿,不能完成输出-1。 以岛屿为圆心做半径为d的圆,可在X轴上产生两个交点,即为X轴上可覆盖该岛屿的区间,求出所有岛屿所对应的区间,将交集不为空的区间分为一组,这样你会发现答案其实就是求区间可分为多少组。#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include<math 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1052田忌赛马先把田忌和国王的马排序。每次取田忌的最快的马与国王最快的马比较,有三种情况。一,田忌最快的马比国王最快的快,那么直接拿田忌最快的马去赢国王最快的马。二,田忌最快的马比国王最快的慢,那么拿田忌最慢的马去输国王最快的马。三,田忌最快的马与国王最快的马速度一样。这时就比较麻烦一点了。 先拿田忌最慢的马与国王最慢的马比较。 若比国王快,直接去赢掉国王最慢的马。 否则田忌最慢的马再去与国王最快的马比较,此时这两只马必定是要比赛的,只是比较一下速度而以。给一些测试数据:输入:24 63 624 65 ... 阅读全文
摘要:
http://acm.uestc.edu.cn/problem.php?pid=1447给定一组点集,求至多选四点,使其所围成的面积最大。刚开始四重循环,直接超时掉。后来听说要用到旋转卡壳,且是在求三角形面积基础上求四边形面积的。在AC了一道旋转卡壳法求最大三角形面积后,终于把这道给A了。本题可以把四边形分为两个三角形的并,再用旋转卡壳法分别求出这两个三角形的最大面积。如下图所示,固定i,j点,分别找到这样的h,k点使三角形ijk和三角形ijh面积都最大。#include<stdio.h>#include<stdlib.h>#include<string.h> 阅读全文
摘要:
http://poj.org/problem?id=3304在二维空间上,给定一组线段,能否存在这样的一条直线,使所有线段在这条直线的投影会在一个点上。如果沿着这个投影点做直线的垂线,那么这条垂线必会与所有的线段相交。那么本题就转换为能否找到一条直线与所有的线段相交。想找这样的直线,就要去离散化的枚举,本题怎样有效的枚举是关键。首先假设有一条直线与所有的线段相交,慢慢平移这条直线,使它恰好在某条线段L1的端点上。当然这个时候直线还是与所有的线段相交。然后让直线在这个端点上慢慢旋转,使到直线又经过线段L2的端点。L2和L1要满足不是同一条线段,就算相同,你仍可以继续旋转,总会让直线找到L2,且不 阅读全文
摘要:
http://poj.org/problem?id=2079给定一组点集,选择三点组成三角形,且面积最大。肯定要求出这组点的凸包,接下来就不能想当然的三重循环枚举三点,这样很容易超时。这时就要用到神奇的旋转卡壳法。取凸包的三点i,j,k。先固定i,j。逆时针(当然你也可以顺时针)变换k,你会发现i,j,k三点组成的三角形面积具有单峰性。即如果第一次找到Area(i,j,k+1)<Area(i,j,k),那么此时就是在i,j固定下的形成最大面积的k点了。这样两重循环枚举i,j,时间复杂度为o(n^2)。也许有人会认为不是也要找k吗?时间复杂度为(n^3)才对。非也,如果你认真观察的话,你会 阅读全文
摘要:
http://poj.org/problem?id=2398poj2318的翻版,所不同的是本题所给的线并不排好序的,加一个sort()函数排序即可。(poj2318解题报告)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;double y1,y2,**p=new double*[1005];double judge(int j,double x,double y) 阅读全文
摘要:
把一个矩形分成多个格子,矩形上分布多个点,求每个格子的拥有的点数。简单的叉乘运用,查找时要用二分查找,不然很容易超时。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;double y1,y2,p[5005][2];double judge(int j,double x,double y){ return (p[j][1]-p[j][0])*(y-y1)-(y2-y1)*(x-p[j][0]); //叉乘判断方向,大 阅读全文
摘要:
转自: http://hi.baidu.com/novosbirsk/blog/item/0bf7408fc05bf1e2f01f3622.html之前写过一篇《POJ计算几何入门题目推荐》。本来是随意写写,想不到这篇文章成为了我 blog浏览量第二高的文章,还被许多ACMer转载到其他地方。最近估计ACM赛季又到了,不少热心的ACMER加我Q,询问我那篇文章的事情,希望我再给出一些题目。 本人已经退役了,本来不想再写一些关于ACM的东西了,以免因为自己水平有限,思想落后,误导他人。不过后来想到这个空间晾着也比较尴尬,让各位找新文章 的 ACMER经常扑空我十分过意不去,所以整理了一下以... 阅读全文
摘要:
转自http://hi.baidu.com/novosbirsk/blog/item/723a9727a9ab8804918f9dca.html其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专业,GIS)。以后若有机会,我会补充、完善这个列表。计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片 阅读全文
摘要:
http://poj.org/problem?id=1077#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<queue>using namespace std;/* 把1..n的排列映射为数字 0..(n!-1) */int fac[] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880 };//...int order(const char *s, int n) {//康托展开 i 阅读全文