POJ 1788

题意:给一个什么东西修围墙,只能修水平或者竖直的那种,然后每个拐点都会告诉你坐标,求最后围墙长度。

题解:由于围墙只有横竖,可以分两次每次统计横的或者竖的的总长度,统计方法就是按照如x坐标排序,求相邻x坐标相等的两个点间的y的差值。

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 using namespace std;

 5 struct data

 6 {

 7     int x,y;

 8 }po[101000];

 9 bool compx(data a,data b)

10 {

11     return (a.x!=b.x)?a.x<b.x:a.y<b.y;

12 }

13 bool compy(data a,data b)

14 {

15     return (a.y!=b.y)?a.y<b.y:a.x<b.x;

16 }

17 int main()

18 {

19     int n;

20     while(scanf("%d",&n),n)

21     {

22         for(int i=0;i<n;i++)

23             scanf("%d%d",&po[i].x,&po[i].y);

24         int ans=0;

25         sort(po,po+n,compx);

26         for(int i=0;i<n-1;i+=2)

27             ans+=po[i+1].y-po[i].y;

28         sort(po,po+n,compy);

29         for(int i=0;i<n-1;i+=2)

30             ans+=po[i+1].x-po[i].x;

31         printf("The length of the fence will be %d units.\n",ans);

32     }

33     return 0;

34 }

你可能感兴趣的:(poj)