和NO 1763的思路挺相似的
688K 0MS
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
class pair_n{
public:
pair_n(){X=0,Y=0;}
pair_n(int x,int y):X(x),Y(y){}
int X,Y;
};
void swap(pair_n *c[],int a,int b){
int t1=c[a]->X,t2=c[a]->Y;
c[a]->X=c[b]->X,c[a]->Y=c[b]->Y;
c[b]->X=t1,c[b]->Y=t2;
}
void bubble_sort_XY(pair_n *c[],int n){
int i,j;
for(i=1;i<n;i++)
for(j=i; j>0&&((c[j]->X<c[j-1]->X)||((c[j]->X==c[j-1]->X)&&(c[j]->Y<c[j-1]->Y)));j--) swap(c,j,j-1);
}
void bubble_sort_YX(pair_n *c[],int n){
int i,j;
for(i=1;i<n;i++)
for(j=i; j>0&&((c[j]->Y<c[j-1]->Y)||((c[j]->Y==c[j-1]->Y)&&(c[j]->X<c[j-1]->X)));j--) swap(c,j,j-1);
}
int main(){
int N,i,length=0;
pair_n *cordinate[100001];
string s;
scanf("%d",&N);
while(N!=0){
for(i=0;i<N;i++) cordinate[i]=new pair_n(), scanf("%d%d",&cordinate[i]->X,&cordinate[i]->Y);
bubble_sort_XY(cordinate,N); //对坐标进行先X后Y的排序
for(i=0;i<N;i+=2)
length+=cordinate[i+1]->Y-cordinate[i]->Y; //被相连的两点必然是排好的数列中相邻的一组中的两点
bubble_sort_YX(cordinate,N); //对坐标进行先Y后X的排序
for(i=0;i<N;i+=2)
length+=cordinate[i+1]->X-cordinate[i]->X;
printf("%s%d%s\n","The length of the fence will be ",length," units.");
length=0;
getline(cin,s,'\n');
scanf("%d",&N);
}
return 0;
}