题目描述
cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。
输入格式
输入共有 n+1n+1 行,
第 11 行为 OI 组总人数 nn;
第 22 行至第 n+1n+1 行分别是每人的姓名 ss、出生年 yy、月 mm、日 dd。
输出格式
输出共有 nn 行,
即 nn 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)
输入输出样例
输入 #1
3 Yangchu 1992 4 23 Qiujingya 1993 10 13 Luowen 1991 8 1
输出 #1
Luowen Yangchu Qiujingya
说明/提示
数据保证,1<n<1001<n<100,1≤∣s∣<201≤∣s∣<20。保证年月日实际存在,且年份 ∈[1960,2020]∈[1960,2020]。
排序
代码:
#include<bits/stdc++.h>
using namespace std;
int i,n,m,f,k[5001],s[5001],sub[5001];f是分数线,sub是下标
bool cmp(int a,int b){sort规则
if(s[a]==s[b])return k[a]<k[b];成绩相等比编号
return s[a]>s[b];否则比成绩
}
int main(){
cin>>n>>m;
for(i=1;i<=n;i++)cin>>k[sub[i]=i]>>s[i];输入编号和成绩,同时初始化下标
sort(sub+1,sub+n+1,cmp);对下标排序
f=s[sub[int(m*1.5)]];算分数线
for(i=1;s[sub[i]]>=f;i++);算录取人数
cout<<f<<" "<<i-1<<endl;
for(i=1;s[sub[i]]>=f;i++)cout<<k[sub[i]]<<" "<<s[sub[i]]<<endl;输出
}