首页 > 其他分享 >P1093 [NOIP2007 普及组] 奖学金【排序】

P1093 [NOIP2007 普及组] 奖学金【排序】

时间:2024-07-07 16:55:05浏览次数:22  
标签:NOIP2007 学号 int yuwen 89 总分 P1093 279 奖学金

[NOIP2007 普及组] 奖学金

题目背景

NOIP2007 普及组 T1

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 5 5 名学生发奖学金。期末,每个学生都有 3 3 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 3 3 3 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。

注意,在前 5 5 5 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279  
5 279

这两行数据的含义是:总分最高的两个同学的学号依次是 7 7 7 号、 5 5 5 号。这两名同学的总分都是 279 279 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 7 7 7 的学生语文成绩更高一些。

如果你的前两名的输出数据是:

5 279  
7 279

则按输出错误处理,不能得分。

输入格式

共 n + 1 n+1 n+1 行。

第 1 1 1 行为一个正整数 n ≤ 300 n \le 300 n≤300,表示该校参加评选的学生人数。

第 2 2 2 到 n + 1 n+1 n+1 行,每行有 3 3 3 个用空格隔开的数字,每个数字都在 0 0 0 到 100 100 100 之间。第 j j j 行的 3 3 3 个数字依次表示学号为 j − 1 j-1 j−1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1 ∼ n 1\sim n 1∼n(恰好是输入数据的行号减 1 1 1)。

保证所给的数据都是正确的,不必检验。

输出格式

共 5 5 5 行,每行是两个用空格隔开的正整数,依次表示前 5 5 5 名学生的学号和总分。

样例 #1

样例输入 #1

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出 #1

6 265
4 264
3 258
2 244
1 237

样例 #2

样例输入 #2

8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出 #2

8 265
2 264
6 264
1 258
5 258

问题链接: P1093 [NOIP2007 普及组] 奖学金
问题分析: 排序问题,不解释。
参考链接: (略)
题记: (略)

AC的C++语言程序如下:

/* P1093 [NOIP2007 普及组] 奖学金 */

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 300, N2 = 5;
struct Node {
    int no, yuwen, total;
} s[N];

int cmp(const Node &a, const Node &b)
{
    if (a.total != b.total)
        return a.total > b.total;
    if (a.yuwen != b.yuwen)
        return a.yuwen > b.yuwen;
    else
        return a.no < b.no;
}

int main()
{
    int n, a, b;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> s[i].yuwen >> a >> b;
        s[i].no = i + 1;
        s[i].total = s[i].yuwen + a + b;
    }
    sort(s, s + n, cmp);
    for (int i = 0; i < N2; i++)
        cout << s[i].no << " " << s[i].total << endl;
    return 0;
}

标签:NOIP2007,学号,int,yuwen,89,总分,P1093,279,奖学金
From: https://blog.csdn.net/tigerisland45/article/details/140237714

相关文章

  • CSP-S 2005 T1 谁拿了最多奖学金【题解】
    1.题目描述某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:院士奖学金,每人 8000 元,期末平均成绩高于 80 分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;五四奖学金,每人 4000 元,期末平均成绩高于 85 分(>85),并且班级......
  • [NOIP2007 普及组] 纪念品分组
    传送锚点:www.luogu.com.cn题目背景NOIP2007普及组T2题目描述元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过......
  • P1098 [NOIP2007 提高组] 字符串的展开
    注意三种情况: 1.开头结尾的-,例:-abc--2.-两侧必须同为小写字母或同为数字例;A-a3.对数字不能进行大小写转换#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<algorithm>#defineFor(i,j,n)for(inti=j......
  • P1095 [NOIP2007 普及组] 守望者的逃离
    [NOIP2007普及组]守望者的逃离题目背景NOIP2007普及组T3题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉......
  • java web ssm vue高校奖学金管理系统vue(源码+lw+部署文档+讲解等)
    前言......
  • CSP历年复赛题-P1096 [NOIP2007 普及组] Hanoi 双塔问题
    原题链接:https://www.luogu.com.cn/problem/P1096题意解读:汉诺双塔的移动次数,与经典汉诺塔的区间在于同一个尺寸盘子有两个。解题思路:可以直接用经典汉诺塔方法来计算,双塔的结果就最终乘以2即可。首先想到的是递归,但是由于数据量n最大200,递归会超时,但是50%的样例应该没问题,先......
  • CSP历年复赛题-P1095 [NOIP2007 普及组] 守望者的逃离
    原题链接:https://www.luogu.com.cn/problem/P1095题意解读:在有限的时间内,通过跑步或者闪烁两种方式,能跑出的最远距离是多少,以及是否能跑出出口。解题思路:1、贪心法每一秒钟,都有两种选择:跑步(17米)、闪烁(60米,前提是蓝够10点,否则等待1s恢复4点蓝)经过计算,恢复足够的蓝到闪烁需要3.......
  • 在奖学金管理系统项目中使用 GitHub 管理源代码
    1.GitHub管理代码的基本步骤GitHub是一个基于Git的代码托管平台,提供了版本控制和协作开发的功能。以下是使用GitHub管理代码的基本步骤:注册和创建存储库:注册一个GitHub账号。创建一个新的存储库(Repository):登录GitHub,点击右上角的“+”号,选择“Newreposi......
  • CSP历年复赛题-P1094 [NOIP2007 普及组] 纪念品分组
    原题链接:https://www.luogu.com.cn/problem/P1094题意解读:贪心选择解题思路:贪心策略:将纪念品按价格由小到大排序,优先一大、一小,如果价格之和不超限,则分为一组,如果超限,则大的单独分为一组,重复以上过程,直到所有数据都遍历到,采用一头一尾双指针即可。证明:如果最大价格不是和最......
  • 信息学奥赛一本通题目解析:1938:【07NOIP普及组】奖学金(排序)
    【题目描述】某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前55名学生发奖学金。期末,每个学生都有33门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学......