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;
}