高校录取(UPC训练赛12)

题目描述

高三全省联合模拟考试刚刚结束,经过各科老师的努力,各个学科的改卷工作终于结束了,每位同学的各科分数也已经结算完毕。此时,老师们开始模拟各个高校录取情况。
每个大学有自己的录取范围。例如,清华、北大招生约为理科全省前100名,复旦、上海交大在全省理科101至300名。老师们想要知道哪些同学可以进入某个名校。
可是,统计软件突然失灵,查询和比对工作也无法进行,只有事先已经得到的理科每位同学的各科成绩。现在请你帮助老师编写一个程序,显示出可以进入某高校的名单。
此次考试理科排名规则:
1.按照语文、数学、外语、理科综合四门科目总分由高到低排名;
2.若总分相同,则按照数学成绩由高到低排名;
3.若总分和数学成绩都相同,按照理科综合成绩由高到低排名;
4.若总分、数学、理科综合都相同,按照语文成绩由高到低排名;
5.若总分、数学、理科综合、语文成绩都相同,则按照报名序号从小到大排序(这里报名序号为输入顺序,第1个输入就是1号,第100个输入就是100号)。

输入

第一行三个整数n,a和b,分别表示参加考试的人数和某高校的录取名次范围(从名次a到名次b)。
接下来n行,每行4个整数,表示每位同学的每门学科的成绩。依次为语文、数学、英语、综合。成绩0<=x<=300。

输出

输出b-a+1行,排名在a~b名的同学信息。
每行两个整数,分别为报名序号和总分(报名序号看题目描述),中间用空格分开。

样例输入 Copy
6 3 5
118 139 130 286
105 130 129 296
113 138 123 291
104 133 119 283
89 139 116 287
103 127 118 288
样例输出 Copy
2 660
4 639
6 636
提示

对于100%的数据,1<=a<=b<=n<=100000。

代码实现:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef struct score
{
    int yw,sx,yy,lz,zf,id;
}SCORE;
SCORE a[100005];
bool cmp(score s1,score s2)
{
    if(s1.zf!=s2.zf)
    {
        return s1.zf > s2.zf; 
    }
    if(s1.sx!=s2.sx)
    {
        return s1.sx>s2.sx;
    }
    if(s1.lz!=s2.lz)
    {
        return s1.lz > s2.lz;        
    }
    if(s1.yw != s2.yw)
    {
        return s1.yw > s2.yw ;
    }
    return s1.id<s2.id;
}
int main()
{
    ios::sync_with_stdio;
    cin.tie(0);
    cout.tie(0);
    int n,x,y,i;
    cin >> n>> x >> y;
    for(i=1;i<=n;i++)
    {
        a[i].zf =0;
        cin >> a[i].yw >> a[i].sx>> a[i].yy >> a[i].lz;
        a[i].zf= a[i].yw+a[i]. sx+a[i].yy+a[i].lz;
        a[i].id =i;
    }
    sort(a+1,a+n+1,cmp);
    for(i=x;i<=y;i++)
    {
        cout << a[i].id << " "<< a[i].zf<< "\n";
    }
    return 0;
}

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles Coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值