HDU1392:Surround the Trees(凸包问题)
Surround the Trees
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7164 Accepted Submission(s): 2738
The diameter and length of the trees are omitted, which means a tree can be seen as a point. The thickness of the rope is also omitted which means a rope can be seen as a line.

There are no more than 100 trees.
is less than 32767. Each pair is separated by blank.
Zero at line for number of trees terminates the input for your program.
9
12 7
24 9
30 5
41 9
80 7
50 87
22 9
45 1
50 7
0
243.06
题意是求将全部点围住的那个面积的最小周长。。可是要注意当仅仅有一个点时,也就输出0.00,当仅仅有两个点时。
。也就是两点间的距离。
。
这是凸包问题的入门题。。。(Orz) 用的是刘汝佳大白上的Andrew算法。。看他的代码实现。。简直丧心病狂。
。
Orz 。
。搞了好久的时间。。智商全然不够用。。
好吧。。由于是今天刚刚接触。
。所以一天也就弄了这么一道题。
。5555555.。
。泪流满面。。。
</pre><pre name="code" class="cpp"> #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<sstream>
#include<cmath> #define f1(i, n) for(int i=0; i<n; i++)
#define f2(i, m) for(int i=1; i<=m; i++) struct Point
{
double x, y;
}; void sort(Point *p, int n) //依照x从小到大排序(假设x同样, 依照y从小到大排序)
{
Point temp;
int i, j;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
{
if(p[j].x>p[j+1].x)
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
if(p[j].x==p[j+1].x && p[j].y>p[j+1].y)
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
} int cross(int x1, int y1, int x2, int y2) //看P[i]是否是在其内部。。
{
if(x1*y2-x2*y1<=0) //叉积小于0。说明p[i]在当前前进方向的右边。因此须要从凸包中删除c[m-1],c[m-2]
return 0;
else
return 1;
} int convexhull(Point *p, Point *c, int n)
{
int i,m=0,k;
f1(i, n) //下凸包
{
while(m>1 && !cross(c[m-2].x-c[m-1].x,c[m-2].y-c[m-1].y,c[m-1].x-p[i].x,c[m-1].y-p[i].y))
m--;
c[m++]=p[i];
}
k=m;
for(i=n-2; i>=0; i--) //求上凸包
{
while(m>k && !cross(c[m-2].x-c[m-1].x,c[m-2].y-c[m-1].y,c[m-1].x-p[i].x,c[m-1].y-p[i].y))
m--;
c[m++]=p[i];
}
if(n>1)
m--;
return m;
} double dis(Point a, Point b) //求两个凸包点之间的长度。。
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} int main()
{
Point a[105], p[105];
int n, i, m;
double lenth;
while(scanf("%d",&n) &&n)
{
f1(i, n)
scanf("%lf %lf",&a[i].x, &a[i].y); if(n==1)
{
printf("0.00\n");
continue;
}
else if(n==2)
{
printf("%.2lf\n", dis(a[0], a[1]));
continue;
}
sort(a, n);
m=convexhull(a, p, n);
lenth = 0;
f2(i, m)
lenth+=dis(p[i],p[i-1]);
printf("%.2lf\n",lenth);
}
return 0;
}
HDU1392:Surround the Trees(凸包问题)的更多相关文章
- HDU-1392 Surround the Trees,凸包入门!
Surround the Trees 此题讨论区里大喊有坑,原谅我没有仔细读题还跳过了坑点. 题意:平面上有n棵树,选一些树用绳子围成一个包围圈,使得所有的树都在这个圈内. 思路:简单凸包入门题,凸包 ...
- hdu1392 Surround the Trees 凸包
第一次做凸包,这道题要特殊考虑下,n=2时的情况,要除以二才行. 我是从最左边的点出发,每次取斜率最大的点,一直到最右边的点. 然后从最左边的点出发,每次取斜率最低的点,一直到最右边的点. #incl ...
- hdu 1392 Surround the Trees 凸包模板
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1392 Surround the Trees (凸包)
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU - 1392 Surround the Trees (凸包)
Surround the Trees:http://acm.hdu.edu.cn/showproblem.php?pid=1392 题意: 在给定点中找到凸包,计算这个凸包的周长. 思路: 这道题找出 ...
- hdu 1392 Surround the Trees 凸包裸题
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDUJ 1392 Surround the Trees 凸包
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- ACM学习历程—HDU1392 Surround the Trees(计算几何)
Description There are a lot of trees in an area. A peasant wants to buy a rope to surround all these ...
- HDU 1392 Surround the Trees (凸包周长)
题目链接:HDU 1392 Problem Description There are a lot of trees in an area. A peasant wants to buy a rope ...
- HDU 1392 Surround the Trees(凸包*计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1392 这里介绍一种求凸包的算法:Graham.(相对于其它人的解释可能会有一些出入,但大体都属于这个算 ...
随机推荐
- 39.C语言操作数据库
一.准备工作: sqlite3工具集:链接:https://pan.baidu.com/s/1mjufXZa 密码:2ui7 安装步骤: 打开如下文件夹,找到sqlite3.dll,并放入系统目录 2 ...
- offSet和client和scroll
这三个是是js盒模型属性 client clientWidth 内容宽度加上左右padding clientHeight 内容高度加上上下padding clientTop 上边框的宽度 client ...
- python之-字符编码
1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...
- ThreadLocal使用演示样例
MainActivity例如以下: package cc.cv; import android.os.Bundle; import android.app.Activity; /** * Demo描写 ...
- 安卓手机上安装 谷歌 play 商店
安卓手机上安装 谷歌 play 商店 安卓(Android)就是现在流行的智能手机系统,它是由Google公司和开放手机联盟领导及开发.由于安卓系统的底层代码(AOSP)是开源的,以GPL和Apach ...
- [51Nod]NOIP2018提高组省一冲奖班模测训练(二)
http://www.51nod.com/contest/problemList.html#!contestId=73&randomCode=4408520896354389006 还是原题大 ...
- C#空值和null判断
一.空值判断效率 string s = ""; if(s == ""){} if(s == string.Empty){} if (string.IsNullO ...
- Spring异步执行(@Async)2点注意事项
Spring中可以异步执行代码,注解方式是使用@Async注解. 原理.怎么使用,就不说了. 写2点自己遇到过的问题. 1.方法是公有的 // 通知归属人 @Async public void not ...
- 基于Lwip协议栈中独立模式下回调函数的使用
一.使用Lwip协议独立模式开发 最近在STM32F4上边移植了Lwip,Lwip是一个小型开源的TCP/IP协议栈,有无操作系统的支持都可以运行.我当前只测试了TCP Server功能,然后对TCP ...
- 【例题 8-3 UVA - 1152】4 Values whose Sum is 0
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然中间相遇. 自己写了个hash处理一下冲突就可以了. [代码] /* 1.Shoud it use long long ? 2. ...