合影效果 计蒜客 - T1154
问题描述
蒜头君和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。
如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,
请问他们合影的效果是什么样的(所有人的身高都不同)?
输入格式
第一行是人数 n(2≤n≤40,且至少有 1 个男生和 1 个女生)。
后面紧跟 n 行,每行输入一个人的性别(男male或女female)和身高(范围在 [0,2] 内的浮点数,单位米),两个数据之间以空格分隔。
输出格式
n 个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。
每个浮点数需保留到小数点后 2 位,相邻两个数之间用单个空格隔开。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
6
male 1.72
male 1.78
female 1.61
male 1.65
female 1.70
female 1.56
样例输出
1.65 1.72 1.78 1.70 1.61 1.56
- 参考程序
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=50;
double female[N],male[N];
bool cmp(float a,float b) {
return a>b;
}
int main() {
string sex;
int n, f=0,m=0; cin>>n;
for(int i=0; i<n; i++) {
cin>>sex;
if(sex=="male") cin>>male[i];
else cin>>female[i];
}
sort(female, female+n, cmp);
sort(male, male+n);
for(int i=0; i<n; i++) {
if(male[i]!=0) printf("%.2lf ",male[i]);
}
for(int i=0; i<n; i++) {
if(female[i]!=0) printf("%.2lf ",female[i]);
}
return 0;
}
- 参考程序
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include <iomanip>
using namespace std;
const int N=41;
struct T {
string sex;
double height;
} people[N],arr[N],brr[N];
bool cmp1(T a,T b) {
return a.height<b.height;
}
bool cmp2(T a,T b) {
return a.height>b.height;
}
int main() {
int n,m=0,f=0; cin>>n;
for(int i=0; i<n; i++) {
cin>>people[i].sex>>people[i].height;
if(people[i].sex=="male") {
arr[m].height=people[i].height;
m++;
} else {
brr[f].height=people[i].height;
f++;
}
}
sort(arr, arr+m, cmp1);
sort(brr, brr+f, cmp2);
for(int i=0; i<m; i++) {
cout<<fixed<<setprecision(2)<<arr[i].height<<" ";
}
for(int i=0; i<f; i++) {
cout<<fixed<<setprecision(2)<<brr[i].height<<" ";
}cout<<endl;
return 0;
}