Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40793
  • 博文数量: 22
  • 博客积分: 1130
  • 博客等级: 少尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-11 17:20
文章分类

全部博文(22)

文章存档

2010年(3)

2009年(19)

我的朋友
最近访客

分类:

2009-11-02 22:38:47

两次排序,不用检查输入是否合理。


#include <iostream>
#include <algorithm>
using namespace std;

const int MAX=100001;

typedef struct _Pos
{
    int x;
    int y;
}Pos;
Pos Nodes[MAX];
int N;
int ans;

int cmpx(const void* ap,const void* bp)
{
    Pos* a=(Pos*)ap;
    Pos* b=(Pos*)bp;
    if(a->x!=b->x)
        return a->x-b->x;
    else
        return a->y-b->y;
}

int cmpy(const void* ap,const void* bp)
{
    Pos* a=(Pos*)ap;
    Pos* b=(Pos*)bp;
    if(a->y!=b->y)
        return a->y-b->y;
    else
        return a->x-b->x;
}

void Process()
{
    ans=0;
    qsort(Nodes,N,sizeof(Pos),cmpx);

    for(int i=0;i<N;i+=2)
        ans+=(Nodes[i+1].y-Nodes[i].y);
     
    qsort(Nodes,N,sizeof(Pos),cmpy);

    for(int i=0;i<N;i+=2)
        ans+=(Nodes[i+1].x-Nodes[i].x);
    
}

int main()
{
    do{
        scanf("%d",&N);
        if(N==0)
            break;
        for(int i=0;i<N;i++)
            scanf("%d%d",&Nodes[i].x,&Nodes[i].y);
        Process();
        printf("The length of the fence will be %d units.\n",ans);
        getchar();
    }while(N!=0);
    return 0;
}


阅读(301) | 评论(0) | 转发(0) |
0

上一篇:PKU 1727

下一篇:POJ 1786

给主人留下些什么吧!~~