又到了一年一度评奖学金的时候,duoka迫切地想知道班里有谁能够获得奖学金,并打算让这些同学v她50吃开封菜。但评奖名单迟迟未发布,于是duoka找到了班里同学的绩点和评分等信息,决定先自己算一算有哪些同学能获得奖学金。
duoka学校的奖学金是将同学们按照总评成绩进行排名,在本学年未挂过科的同学中,总评排名前K
名的同学能够获得数额不等的奖学金。
同学们的总评成绩由以下几个部分构成:绩点分,德育分,智育分,是否挂科。
绩点分:学生的绩点一般表示为五分制绩点,绩点分 = (五分制绩点*10)+50。
德育分:每位同学有70分的基础分,再加上该同学的申报分数即为总德育分,但德育分总计不能超过100分。
智育分:无基础分,同学的申报分数即为智育分得分,且无上限。
总评成绩的计算公式为:
总评 = (绩点分+智育分)∗0.7+德育分∗0.3。
注意:如果该同学有挂科情况,则无论总评成绩为多少,都不参与奖学金评定。
请你输出能够获得奖学金的同学的排名、姓名和总评成绩。
输入格式:
第一行输入两个整数,分别表示班里学生人数N
(1≤N≤2×104),奖学金名额K
(1≤K≤100)。
之后N
行每行输入一组学生的信息,格式如下:
姓名 五分制绩点 德育分申报分 智育分申报分 是否挂科
其中姓名为长度不超过10、不含空格的由小写字母组成的字符串,五分制绩点为闭区间 [0,5] 内的一位浮点数(一位小数),德育分申报分和智育分申报分均为区间 [0,100] 内的整数,是否挂科用整数0
或1
表示,0
表示有挂科,1
表示没有挂科。
每样信息之间均以空格分隔。题目保证没有重名的同学。
输出格式:
每行按总评成绩非升序输出同学的排名、姓名和总评成绩(保留一位小数),期间以1个空格分隔。
注意:总评成绩相同的同学享有并列的排名,排名并列时,按照姓名的字典序升序输出。
输入样例:
10 5
aaaaa 3.9 40 5 1
bbbbb 4.0 50 0 1
ccccc 4.2 20 48 0
ddddd 3.8 20 1 1
eeeee 2.7 30 50 1
fffff 3.2 30 2 1
ggggg 3.6 25 6 1
hhhhh 2.8 25 14 1
iiiii 3.6 20 10 0
jjjjj 3.9 41 1 1
输出样例:
1 eeeee 118.9
2 aaaaa 95.8
3 bbbbb 93.0
3 jjjjj 93.0
5 ggggg 92.9
5 hhhhh 92.9
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n,k;
struct ty
{
string name;
double jidian;
int deyv;
int zhiyv;
int p;
double zong;
bool operator<(const ty &a)const
{
if(abs(zong-a.zong)<0.01)
{
return name<a.name;
}
return zong>a.zong;
}
};
ty stu[20010];
int cnt;
int main()
{
cin>>n>>k;
string name;double jidian;int zhiyv,deyv,gua;
for(int i=1;i<=n;++i)
{
cin>>name>>jidian>>deyv>>zhiyv>>gua;
if(gua==0)continue;
if(deyv>=30)deyv=100;
else deyv=70+deyv;
jidian=jidian*10+50;
ty tmp;
tmp.deyv=deyv,tmp.name=name,tmp.zhiyv=zhiyv,tmp.jidian=jidian,tmp.zong=(jidian+zhiyv)*0.7+deyv*0.3;
stu[++cnt]=tmp;
}
if(cnt==1)
{
cout<<1<<" "<<stu[1].name<<" ";
printf("%.1f",stu[1].zong);
return 0;
}
sort(stu+1,stu+1+cnt);
stu[1].p=1;
for(int i=2;i<=cnt;++i)
{
if(stu[i-1].zong-stu[i].zong<0.01)
{
stu[i].p=stu[i-1].p;
}
else
{
stu[i].p=i;
}
}
for(int i=1;stu[i].p<=k&&i<=cnt;++i)
{
cout<<stu[i].p<<" "<<stu[i].name<<" ";
printf("%.1f",stu[i].zong);
cout<<endl;
}
return 0;
}