题意:给一个什么东西修围墙,只能修水平或者竖直的那种,然后每个拐点都会告诉你坐标,求最后围墙长度。
题解:由于围墙只有横竖,可以分两次每次统计横的或者竖的的总长度,统计方法就是按照如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 }