微信网站制作合同举一个病毒营销的例子
夭折了,阿生竟然有粉丝团了,而且还是清一色的妹子。激动的阿生忍不住咬了自己一下,确定一下不是梦,好吧,还真是个梦。醒来的阿生悲痛欲绝,只想知道梦境中她们平面坐标的逆时针排列,你能帮帮他吗。
输入格式:
输入每行给出一组整数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)
思路
注意,测试的时候,需要通过CTRL+Z 然后回车,才能结束输入。
我的思路很简单,设定结构体存储xy坐标,然后就是对输入进行遍历,设立四个vector数组,用来存储每个象限的节点,最后对四个数组分别进行sort,注意不同象限的sort自定义cmp方法不一样,要根据象限保持逆时针的特点来写cmp方法。
最后根据从三四二一象限这样的顺序进行输出就好。
C++ AC代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct node
{int x;int y;
};
//3
bool cmp3(node n1,node n2)
{if(n1.x!=n2.x){return n1.x<n2.x;}else{return n1.y>n2.y;}
}
//4
bool cmp4(node n1,node n2)
{if(n1.x!=n2.x){return n1.x<n2.x;}else{return n1.y<n2.y;}
}
//2
bool cmp2(node n1,node n2)
{if(n1.x!=n2.x){return n1.x>n2.x;}else{return n1.y<n2.y;}
}
//1
bool cmp1(node n1,node n2)
{if(n1.x!=n2.x){return n1.x<n2.x;}else{return n1.y<n2.y;}
}
int main()
{node nd;vector<node> v1;vector<node> v2;vector<node> v3;vector<node> v4;while(cin>>nd.x>>nd.y){if(nd.x<0&&nd.y<0){v3.push_back(nd);}else if(nd.x>0&&nd.y<0){v4.push_back(nd);}else if(nd.x>0&&nd.y>0){v2.push_back(nd);}else if(nd.x<0&&nd.y>0){v1.push_back(nd);}}sort(v3.begin(),v3.end(),cmp3);sort(v1.begin(),v1.end(),cmp1);sort(v2.begin(),v2.end(),cmp2);sort(v4.begin(),v4.end(),cmp4);cout<<"(0,0)"<<endl;for(int i=0; i<v3.size(); i++){printf("(%d,%d)",v3[i].x,v3[i].y);cout<<endl;}for(int i=0; i<v4.size(); i++){printf("(%d,%d)",v4[i].x,v4[i].y);cout<<endl;}for(int i=0; i<v2.size(); i++){printf("(%d,%d)",v2[i].x,v2[i].y);cout<<endl;}for(int i=0; i<v1.size(); i++){printf("(%d,%d)",v1[i].x,v1[i].y);cout<<endl;}return 0;
}