学习凸包(三):凸包练习 POJ 1113
来源:互联网 发布:飞歌导航端口波特率 编辑:程序博客网 时间:2024/04/29 04:55
接上文:学习凸包(二):分治法求解http://128kj.iteye.com/blog/1748622
通过前面两文学习,基本上明白了凸包,先做个练习POJ 1113.
POJ 1113题意:
从前有一个吝啬的国王要求他的总设计师在他的城堡周围建一道围墙。这国王非常吝啬,以至于他没有听总设计师的建一个拥有外形漂亮又高大的砖头塔楼的围墙的建议,而是要求用最少的石头和劳工围着整个城堡建围墙,但是要求围墙必须远离城堡一定的距离。要是国王发现发现设计师用了超过建造围墙所需要的材料,那么这个设计师的脑袋将保不住了。而且,国王要求设计师马上拿出一个建墙的计划,列出建造围墙所需要的最少的材料。你的任务是去帮助这个可怜的设计师保住他的性命,请写一个程序算出建造满足国王要求的围墙的最小的长度。这个任务事实上稍微有点简单,因为国王的城堡是一个多边形的,除开顶点处,其他的地方不会相交,并且位于平坦的地面上,设计师早已画好了一个笛卡尔坐标系,而且精确地计算出了城堡中每一个点的坐标。
Input
第一行包括两个整数,N,L,第一个整数是点的个数,第二个整数是围墙必须远离城堡的距离。接下来n行,每行两个数{中间一个空格}表示每一个点的坐标。所有的点各不相同。
Output
输出一个整数,即围墙的长度。答案四舍五入
样例:
Sample Input
9 100
200 400
300 400
300 300
400 300
400 400
500 400
500 200
350 200
200 200
Sample Output
1628
从图可以看出,所求围墙(虚线部分)长度 = 凸包边长 + 一个圆周长
下面是AC代码(分治法求凸包):
通过前面两文学习,基本上明白了凸包,先做个练习POJ 1113.
POJ 1113题意:
从前有一个吝啬的国王要求他的总设计师在他的城堡周围建一道围墙。这国王非常吝啬,以至于他没有听总设计师的建一个拥有外形漂亮又高大的砖头塔楼的围墙的建议,而是要求用最少的石头和劳工围着整个城堡建围墙,但是要求围墙必须远离城堡一定的距离。要是国王发现发现设计师用了超过建造围墙所需要的材料,那么这个设计师的脑袋将保不住了。而且,国王要求设计师马上拿出一个建墙的计划,列出建造围墙所需要的最少的材料。你的任务是去帮助这个可怜的设计师保住他的性命,请写一个程序算出建造满足国王要求的围墙的最小的长度。这个任务事实上稍微有点简单,因为国王的城堡是一个多边形的,除开顶点处,其他的地方不会相交,并且位于平坦的地面上,设计师早已画好了一个笛卡尔坐标系,而且精确地计算出了城堡中每一个点的坐标。
Input
第一行包括两个整数,N,L,第一个整数是点的个数,第二个整数是围墙必须远离城堡的距离。接下来n行,每行两个数{中间一个空格}表示每一个点的坐标。所有的点各不相同。
Output
输出一个整数,即围墙的长度。答案四舍五入
样例:
Sample Input
9 100
200 400
300 400
300 300
400 300
400 400
500 400
500 200
350 200
200 200
Sample Output
1628
从图可以看出,所求围墙(虚线部分)长度 = 凸包边长 + 一个圆周长
下面是AC代码(分治法求凸包):
- import java.util.*;
- class Line {//线
- Point p1, p2;
- Line(Point p1, Point p2) {
- this.p1 = p1;
- this.p2 = p2;
- }
- public double getLength() {
- double dx = Math.abs(p1.x - p2.x);
- double dy = Math.abs(p1.y - p2.y);
- return Math.sqrt(dx * dx + dy * dy);
- }
- }
- class Point{//点
- double x;
- double y;
- public Point(double x,double y){
- this.x=x;
- this.y=y;
- }
- }
- /*
- * 分治法求凸包
- */
- class QuickTuBao {
- List<Point> pts = null;//点集
- List<Line> lines = new ArrayList<Line>();//点集pts的凸包
- public void setPointList(List<Point> pts) {
- this.pts = pts;
- }
- 学习凸包(三):凸包练习 POJ 1113
- poj 1113(凸包)
- poj 1113(凸包)
- poj 1113(凸包)
- poj 1113(凸包)
- POJ 1113 凸包
- POJ 1113 凸包
- poj 1113 凸包
- POJ 1113 凸包
- POJ 1113 WALL (凸包问题)
- POJ 1113 Wall (凸包)
- poj 1113 Wall(凸包周长)
- POJ 1113 Wall (凸包)
- POJ 1113 Wall (凸包)
- poj 1113(凸包入门)
- poj 1113 wall (凸包)
- poj 1113wall (凸包)
- POJ 1113 Wall(凸包)
- 画板总结(一)
- 集合运算
- java.lang.NoClassDefFoundError: javax/mail/Message
- LinkList 部分源码导读
- wine qq 2012 for linux Ubuntu 64位兼容(12月21日末日版)
- 学习凸包(三):凸包练习 POJ 1113
- hdu1030
- 关于专利
- 学习凸包(二):分治法求解
- FreeMarker 真实案例应用
- 通过commons-email发送邮件
- struts2学习小结
- java数字区间重叠校验
- JAVA单例模式读取properties配置文件