关闭

POJ 1788 Building a New Depot(水~)

483人阅读 评论(0) 收藏 举报
分类:

Description
给出几个坐标点,让你求出将所有的点围起来的篱笆的长度,其中每个点都在篱笆的拐角处,求处最小的篱笆的长度
Input
多组输入,每组用例第一行为坐标点个数n,之后n行为每个坐标点的坐标,每组输入后跟一空行,以0结束输入
Output
对于每组用例,输出最小的篱笆长度
Sample Input
6
1 1
1 3
3 3
2 1
3 2
2 2

0
Sample Output
The length of the fence will be 8 units.
Solution
由于每个点都是在坐标点出并且在篱笆的拐弯处,所以任意横坐标或者纵坐标上的点都是偶数个的,要求篱笆的长度最小,所以就要求出最近的横坐标或者纵坐标相等的两个点的距离,用sort函数二次排序,用纵坐标横坐标分别进行求和就可以了
Code

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF (1<<29)
#define maxn 100005
struct node
{
    int x,y;
}num[maxn];
int n;
int cmp1(node a,node b)
{
    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;
}
int cmp2(node a,node b)
{
    if(a.y==b.y)
        return a.x<b.x;
    return a.y<b.y;
}
int main()
{
    while(scanf("%d",&n),n)
    {
        for(int i=0;i<n;i++)
            scanf("%d%d",&num[i].x,&num[i].y);
        int ans=0;//初始化 
        sort(num,num+n,cmp2);//按纵坐标升序排 
        for(int i=0;i<n;i+=2)   
            ans+=num[i+1].x-num[i].x;//累加纵坐标相同两点间距 
        sort(num,num+n,cmp1);//按横坐标升序排 
        for(int i=0;i<n;i+=2)
            ans+=num[i+1].y-num[i].y;;//累加横坐标相同两点间距 
        printf("The length of the fence will be %d units.\n",ans);  
    }
    return 0;
}
0
0
查看评论

POJ 1788 Building a New Depot 笔记

用篱笆围院子。篱笆只有东西和南北两个方向,每次改变方向打下一个木桩。已知有P个木桩和其坐标,求篱笆的长度。
  • woniupengpeng
  • woniupengpeng
  • 2017-06-05 21:00
  • 92

poj 1788 Building a New Depot

题意分析: 这道题是说在平面上给你几个点,然后你把这些点连接起来,求这个封闭的图形的周长。因为这些被给出的点是这个图形的顶点,且水平方向的相邻点两两连接,所以水平方向的点事偶数个,垂直方向的点也是这样。 代码如下: #include #include #include #include #in...
  • lms1256012967
  • lms1256012967
  • 2014-12-13 10:00
  • 277

POJ 1788 Building a New Depot

Description  给出几个坐标点,让你求出将所有的点围起来的篱笆的长度,其中每个点都在篱笆的拐角处,求处最小的篱笆的长度  Input  多组输入,每组用例第一行为坐标点个数n,之后n行为每个坐标点的坐标,每组输入后跟一空行,以0结束输入  O...
  • qq_33913037
  • qq_33913037
  • 2017-06-15 11:08
  • 121

POJ Building a New Depot

题目: 建设一个围栏,围栏的部分只有横向和竖向两种方向,围栏的拐角处算一个点,给出围栏的所有点,计算出围栏的总长度。 解题思路: 1 围栏由多个线段构成,每个线段的长度至少为1. 2 线段不是横向的就是竖向的 3 x坐标相等或y坐标相等的点数目必定为偶数。 4 按x坐标从小到大排序,x坐...
  • lijiecsu
  • lijiecsu
  • 2012-04-20 16:06
  • 448

POJ 1788 Building a New Depot(计算正多边形边长)

POJ 1788 Building a New Depot(计算正多边形边长) http://poj.org/problem?id=1788 题意:        有一个多边形(可能是凹或凸),这个多边形的每条边都平行于坐标轴,且给出...
  • u013480600
  • u013480600
  • 2014-09-16 18:35
  • 941

ZOJ 2157 Building a New Depot(POJ 1788)

感觉这就不是计算几何题,是排序题……做两次二级排序,关键字是点的x,y坐标值。x优先排序时,计算共线的点 y 的差距绝对值之和,就是所有竖直(南北向)围墙长度;y优先排序时,计算共线点 x 的差距绝对值之和,就是所有横着(东西向)的围墙长度。两个加起来输出就好。ps:注意凹多形的情况,下面给几组数据...
  • l04205613
  • l04205613
  • 2011-05-03 13:40
  • 1757

zoj 2157 || poj 1788 Building a New Depot

给你N个点,求出这些点组成的图形的周长,凸凹都可能。会升提的这个题。。。>因为这些点必须在拐点上,所以,排序后,每一行的点必须为偶数个。因为是连通块,所以,这一行的第一个点和第二个点必须有线,二三之间必然在这一行不存在连接的线。。。以此类推。。而因为总个数是偶数,所以只用考虑第i和 i+1连线...
  • zxy_snow
  • zxy_snow
  • 2011-05-03 16:15
  • 1195

C语言--Building a New Depot

题目链接点击打开链接
  • z_Y_x_ac
  • z_Y_x_ac
  • 2014-11-08 00:14
  • 303

ZOJ 2157 || Building a New Depot(纵向排序 横向排序

给你这些标杆的点,点与点之间的连线只有南北,和东西方向。只有在拐点上的点。 计算这些点围城的多边形的周长。 将这些点二次排序。 第一次纵向排序,算出 x 的差值累加就为,所有东西方向线段的长度。 第二次横向排序,算出 y 的差值累加就为,所有南北方向线段的长度。 #include ...
  • FXXKI
  • FXXKI
  • 2015-02-04 12:17
  • 465

poj1740 A New Stone Game 博弈

题目在此,链接 题意: 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。 最后谁无子可取即输。 分析: 首先看两堆:1 1 的状态肯定是先手输~~但是俩数不一样的话就是先手赢了。。 再看三堆:...
  • liuqiyao_01
  • liuqiyao_01
  • 2013-04-27 08:59
  • 1913
    个人资料
    • 访问:548729次
    • 积分:24493
    • 等级:
    • 排名:第322名
    • 原创:1943篇
    • 转载:0篇
    • 译文:0篇
    • 评论:68条
    最新评论