ACM_绝对值排序
Why Males And Females Apart?
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
In so many occasions, we can find that males and females standing by separately without any rules. So GG is considering whether we can find a way to eliminate the gender gap by sort all men and women in a row.Given a sequence A[1],A[2],A[3]......A[n],which means the heights of students. A[i]<0 means ith student is a girl,otherwise, ith student is a boy.Note that every elements in the sequence is distinct,which means there are not 2 elements having the same absolute value.And your job is to sort the students with their heights from low to high.
译文:在很多场合,我们可以发现那些男性和女性没有任何规则地分开站立。因此,GG正在考虑我们是否能够通过连续排列所有男性和女性来找到消除性别差距的方法。给定一个序列A [1],A [2],A [3] ...... A [n],这意味着学生的高度。A [i] <0表示第i个学生是女孩,否则第i个学生是男孩。注意序列中的每个元素都是不同的,这意味着没有2个元素具有相同的绝对值。并且您的工作是对学生的高度从低到高。
Input:
The input contains many tests.Each test case starts with a single line contains a single integer N(1<=N<=100),which means the number of students.Then a single line contains N integers which are the heights of students.The absolute value of each element is less than 200.
译文:输入包含许多测试。每个测试用例以单行开始,包含一个整数N(1 <= N <= 100),这意味着学生的数量。然后单行包含N个整数,这是学生的高度。每个元素的绝对值小于200。
Output:
For each test case,output all the integers separeted by a space after sort them as required.
译文:对于每个测试用例,根据需要对所有按空格分隔的整数进行排序。
Sample Input:
3 160 170 180 3 159 -171 -160
Sample Output:
160 170 180 159 -160 -171
解题思路:水题!!!用flag标记一下男女,真值为男,假值为女,然后结构体存放的全是正数,按从小到大排序,输出的时候如果flag是假值,前面加个负号就可以了,水过!
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct NODE{ 4 bool flag; 5 int height; 6 }node[105]; 7 bool cmp(NODE x,NODE y){return x.height<y.height;} 8 int main() 9 { 10 int n,x; 11 while(cin>>n){ 12 for(int i=0;i<n;++i){ 13 cin>>x; 14 if(x<0){node[i].flag=false;x=-x;} 15 else node[i].flag=true; 16 node[i].height=x; 17 } 18 sort(node,node+n,cmp); 19 for(int i=0;i<n;++i){ 20 if(!node[i].flag)cout<<'-'; 21 cout<<node[i].height<<(i!=n-1?' ':'\n'); 22 } 23 } 24 return 0; 25 }