目录:
目录
题目:
有 nn 位同学要排队。其中第 ii 位同学身高为 aiai,性别为 bibi (bi=0bi=0 表示女生,bi=1bi=1 表示男生)。
排队规则如下:首先女生排在前,男生排在后;然后相同性别,矮的在前高的在后。
请回答排完队后从前往后的同学身高依次为多少。
输入格式
第一行一个正整数 nn,表示有 nn 位同学。
接下来 nn 行,其中第 ii 行 22 个正整数 ai,biai,bi,分别表示第 ii 位同学的身高与性别。
输出格式
一行共 nn 个用空格隔开的整数,表示排完队后从前往后每位同学的身高。
样例输入
5
170 1
165 0
160 1
161 0
155 0
样例输出
155 161 165 160 170
数据范围
对于 100%100% 的数据,保证 1≤n≤103,1≤ai≤200,0≤bi≤11≤n≤103,1≤ai≤200,0≤bi≤1。
代码:
#include<bits/stdc++.h>
using namespace std;
int girl[1001],boy[1001];
int n,g1=0,b1=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
if(b==0){
g1++;
girl[g1]=a;
}
else{
b1++;
boy[b1]=a;
}
}
for(int i=1;i<=g1;i++){
for(int j=1;j<=g1-i;j++){
if(girl[j]>girl[j+1]){
int t=girl[j];
girl[j]=girl[j+1];
girl[j+1]=t;
}
}
}
for(int i=1;i<=g1;i++){
cout<<girl[i]<<" ";
}
for(int i=1;i<=b1;i++){
for(int j=1;j<=b1-i;j++){
if(boy[j]>boy[j+1]){
int t=boy[j];
boy[j]=boy[j+1];
boy[j+1]=t;
}
}
}
for(int i=1;i<=b1;i++){
cout<<boy[i]<<" ";
}
}
思路:
先判断男和女再统计输出。与第一种解法相反。