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

题解:由于围墙只有横竖,可以分两次每次统计横的或者竖的的总长度,统计方法就是按照如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 }