题目链接:poj 1113   单调链凸包小结

题解:本题用到的依然是凸包来求,最短的周长,只是多加了一个圆的长度而已,套用模板,就能搞定;

AC代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cmath>
 5 using namespace std;
 6 int m,n;
 7 struct p
 8 {
 9     double x,y;
10     friend int operator <(p a, p b)
11     {
12         if(a.x<b.x || ( a.x==b.x && a.y<b.y))
13             return 1;
14         return 0;
15     }
16 }a[1010],ans[1010];
17 double judge(p a, p b ,p c)
18 {
19     return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
20 }
21 int getnumber()//寻找关键点,来求出最短的周长
22 {
23     int k=0;
24     for(int i=0; i<m; i++)
25     {
26         while(k>1 && judge(ans[k-2],ans[k-1],a[i])<=0)
27         {
28             k--;
29         }
30         ans[k++]=a[i];
31     }
32     int k1=k;
33     for(int i=m-1; i>=0; i--)
34     {
35         while(k>k1 && judge(ans[k-2],ans[k-1],a[i])<=0)
36         {
37             k--;
38         }
39         ans[k++]=a[i];
40     }
41     return k-1;//第一个点存了两次;
42 }
43
44 int main()
45 {
46     scanf("%d %d",&m,&n);
47         for(int i=0; i<m; i++)
48             scanf("%lf %lf",&a[i].x,&a[i].y);
49     sort(a,a+m);
50     int top=getnumber();
51     double ans1=0;
52     int i;
53     for( i=0; i<top; i++){
54      ans1+=sqrt((ans[i].x-ans[i+1].x)*(ans[i].x-ans[i+1].x)+(ans[i].y-ans[i+1].y)*(ans[i].y-ans[i+1].y));
55     }
56     //其实最后只需要加上一个圆的周长就ok了,多边形的外角和为360度;
57     ans1+=2*3.141592653*n;
58     printf("%.0f\n",ans1);//G++  这个才能过不能用(.0l%),C++可以
59   return 0;
60 }

转载于:https://www.cnblogs.com/lovychen/p/3990131.html

poj 1113 Wall 凸包的应用相关推荐

  1. POJ 1113 Wall 求凸包

    http://poj.org/problem?id=1113 不多说...凸包网上解法很多,这个是用graham的极角排序,也就是算导上的那个解法 其实其他方法随便乱搞都行...我只是测一下模板... ...

  2. poj 1113/3348 凸包(若干点外建围墙)

    题意:通过坐标给定若干城堡,要在城堡外建立一个围墙,要求任意城堡到围墙的最小距离不少于一个整数r.求围墙的最小长度. 思路:答案为城堡的凸包长加上以r为半径的元周长.因为圆周的圆心角大小之和为n*18 ...

  3. POJ - Wall(凸包周长)

    题目链接:http://poj.org/problem?id=1113 Time Limit: 1000MS Memory Limit: 10000K Description Once upon a ...

  4. wall poj 1113

    题目链接:http://poj.org/problem?id=1113 题意:一个国王要在自己的城堡周围建一堵围墙,要求围墙距城堡最短距离为L.问建这样一堵围墙的最短长度是多少. 题解思路:显然围墙建 ...

  5. 凸包 poj 1113

    求一个多边形  拐弯的地方用圆弧补上 距离>=l 求他的周长 求一个凸包的周长  加2*pi*l #include<stdio.h> #include<string.h> ...

  6. POJ 1228 —— “稳定”凸包

    POJ 1228 Grandpa's Estate 这是个好题目,同时也是个不和谐的题目(不和谐原因是题目出的存在漏洞,数据弱,而且有些条件没给清楚,为了一个SB错误无限WA之后,终于AC) 题意就废 ...

  7. POJ 1584 计算几何 凸包

    链接: http://poj.org/problem?id=1584 题意: 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个 ...

  8. poj 1873 枚举+凸包

    题意:给出一些树的位置,价值,长度,现要求先砍一些树制成一定长度的篱笆将剩余的树围起来,求要砍树的最小总价值. 因为树的个数最多为15个很容易想到用二进制数表示树的状态进行遍历. #include&l ...

  9. POJ 3348 Cows 凸包面积

    题目大意:连接个点,求围成的面积并除以50(向下取整) 题目思路:就是求凸包面积:按逆时针方向为凸包上每条边指定方向,对于每条边AB,累加(AXB)/2的值. #include<cstdio&g ...

最新文章

  1. sqlserver 与 mysql 联合更新两个表 区别
  2. 将h.264视频流封装成flv格式文件(一.flv格式)
  3. C语言希尔排序(解析)
  4. 轻量级DAO层实践初体验
  5. php写实体类,自动生成实体类(方式一)
  6. Golang 规则引擎原理及实战
  7. 5个IO口实现25个按键的扫描,他做到了!堪称一绝!
  8. 朝鲜时蔬(分数据点写算法+毒瘤数学)
  9. linux windows 域,linux加入windows域之完美解决方案
  10. python manager详解_python 多进程共享全局变量之Manager()详解
  11. 《是碰巧还是执着?python所阅读的每一场知识点,唯一的共同点就是——参赛选手中,有python之socket编程!》
  12. java中什么是字节流和字符流_java中字节流与字符流的区别是什么
  13. 阿里云 远程 mysql_阿里云 远程mysql
  14. Windows Moblie 笔迹图板开发
  15. 设计模式——组合设计模式
  16. Excel内容自动翻译
  17. 数字化背景下的经济社会发展的新特征 新趋势
  18. canvas 基础系列(一)之实现抽奖刮刮卡(橡皮擦)
  19. 教你文件重命名快速操作
  20. 关于摄影的若干个命题

热门文章

  1. SpringMVC传递JSON数据的方法
  2. 在ubuntu上使用SSH客户端
  3. Centos 配置JAVA_HOME
  4. SpringMVC学习10之AJAX初体验和了解
  5. html怎么随机放图片,HTML技术:如何在网页中图片的随机显示
  6. mfc中加logo以及背景图
  7. 目标检测(Object Detection)资料汇总
  8. 8个我希望早点意识到的学生思维
  9. Cookie、Session、Token那点事儿
  10. Vue.js 对比其他框架