7-10 阿生的粉丝团 (30 分)

夭折了,阿生竟然有粉丝团了,而且还是清一色的妹子。激动的阿生忍不住咬了自己一下,确定一下不是梦,好吧,还真是个梦。醒来的阿生悲痛欲绝,只想知道梦境中她们平面坐标的逆时针排列,你能帮帮他吗。

输入格式:

输入每行给出一组整数x,y代表梦境中阿生粉丝的平面坐标,并且保证第一个的坐标永远是(0 0): -1000= x <= 1000, -1000<= y <= 1000

输出格式:

按照(%d,%d)的格式输出即可

输入样例:

0 0
70 -50
60 30
-30 -50
80 20
50 -60
90 -20
-30 -40
-10 -60
90 10

输出样例:

(0,0)
(-30,-40)
(-30,-50)
(-10,-60)
(50,-60)
(70,-50)
(90,-20)
(90,10)
(80,20)
(60,30)

 

#include<iostream>
#include<vector>
#include<algorithm>
struct node{
	int x;
	int y;
};
bool cmp(node n1,node n2){
	int f1,f2;
	if(n1.x==0&&n1.y==0){
		f1=5;
	}if(n2.x==0&&n2.y==0){
		f2=5;
	}
	
	if(n1.x>=0&&n1.y>=0){
		f1=2;
	}if(n1.x<=0&&n1.y>0){
		f1=1;
	}if(n1.x<=0&&n1.y<=0){
		f1=4;
	}if(n1.x>=0&&n1.y<0){
		f1=3;
	}if(n2.x>=0&&n2.y>=0){
		f2=2;
	}if(n2.x<=0&&n2.y>0){
		f2=1;
	}if(n2.x<=0&&n2.y<=0){
		f2=4;
	}if(n2.x>=0&&n2.y<0){
		f2=3;
	}
	if(f1!=f2){
		return f1>f2;
	} else if(f1==4){
		f1=n1.x*n2.y;
		f2=n2.x*n1.y;
		return f1>f2;
	}else if(f1==3){
		f1=n1.x*n2.y;
		f2=n2.x*n1.y;
		return f1>f2;
	}
	return n1.x!=n2.x ? n1.x>n2.x:n1.y>n2.y;
}
using namespace std;
int main(){
	int a,b;
	vector<node>no;
	while(scanf("%d %d",&a,&b)==2){
		node n;
		n.x=a;
		n.y=b;
		no.push_back(n);
	}
	sort(no.begin(),no.end(),cmp);
	for(int i=0;i<no.size();i++){
		cout<<"("<<no[i].x<<","<<no[i].y<<")"<<endl;
	}
return 0;
}