首页 > 其他分享 >信息学奥赛一本通题目解析:1938:【07NOIP普及组】奖学金(排序)

信息学奥赛一本通题目解析:1938:【07NOIP普及组】奖学金(排序)

时间:2024-04-05 14:33:52浏览次数:21  
标签:07NOIP 语文 成绩 排序 学生 89 总分 奥赛 1938

【题目描述】

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

任务:先根据输入的33门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前55名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279
5 279

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

5 279
7 279

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

【输入】

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

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

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

【输出】

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

【输入样例】

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

【输出样例】

6 265
4 264
3 258
2 244
1 237

【提示】

输入输出样例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

输出:

8 265
2 264 
6 264 
1 258 
5 258

【限制】

50%的数据满足:各学生的总成绩各不相同;

100%的数据满足: 6≤n≤300。

【样例分析】

输入样例

6

90 67 80

87 66 91

78 89 91

88 99 77

67 89 64

78 89 98

这表示有6名学生参加评选,其语文、数学、英语的成绩分别如上所示。

输入样例解析

  • 学生1的成绩为:90(语文)、67(数学)、80(英语),总分为237。
  • 学生2的成绩为:87(语文)、66(数学)、91(英语),总分为244。
  • 学生3的成绩为:78(语文)、89(数学)、91(英语),总分为258。
  • 学生4的成绩为:88(语文)、99(数学)、77(英语),总分为264。
  • 学生5的成绩为:67(语文)、89(数学)、64(英语),总分为220(此学生不在前五名中,所以在这里忽略)。
  • 学生6的成绩为:78(语文)、89(数学)、98(英语),总分为265。

排序过程

根据题目要求的排序规则(总分降序 > 语文成绩降序 > 学号升序),排序后的学生及其总分为:

  • 学生6:265分
  • 学生4:264分
  • 学生3:258分
  • 学生2:244分
  • 学生1:237分

输出样例

6 265

4 264

3 258

2 244

1 237

这意味着,在排序后,总分最高的前五名学生依次是学号为6、4、3、2、1的学生,他们的总分分别是265、264、258、244、237。

直观描述

  • 学生6以微弱优势(总分265)位列第一,他们的英语成绩在所有学生中是最高的。
  • 紧随其后的是学生4,他在数学上表现出色,总分264。
  • 第三名是学生3,他们在数学和英语上都有很好的成绩,总分258。
  • 第四名是学生2,总分244。
  • 第五名是学生1,尽管他的语文成绩最高,但因为其他两科相对较低,所以总分为237。

【解题思路】

  1. 定义学生结构体:首先定义一个学生结构体Student,包含学号、三科成绩、总分作为成员。

  2. 读取输入:读取学生人数n,接着读取每位学生的三科成绩,并计算总分。

  3. 排序:根据题目要求,需要先按总分从高到低排序,总分相同则按语文成绩从高到低排序,如果总分和语文成绩都相同,按学号从小到大排序。这可以通过自定义排序函数实现。

  4. 输出前五名学生的信息:根据排序后的结果,输出前五名学生的学号(加1以还原为输入中的编号)和总分。

【代码实现】

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 定义学生结构体
struct Student {
    int id; // 学号
    int scores[3]; // 三科成绩
    int total; // 总分
};

// 自定义排序规则
bool compare(const Student &a, const Student &b) {
    if (a.total != b.total) return a.total > b.total; // 总分降序
    if (a.scores[0] != b.scores[0]) return a.scores[0] > b.scores[0]; // 语文成绩降序
    return a.id < b.id; // 学号升序
}

int main() {
    int n;
    cin >> n;
    vector<Student> students(n);
    
    // 读取数据
    for (int i = 0; i < n; ++i) {
        students[i].id = i + 1; // 学号从1开始
        cin >> students[i].scores[0] >> students[i].scores[1] >> students[i].scores[2];
        students[i].total = students[i].scores[0] + students[i].scores[1] + students[i].scores[2]; // 计算总分
    }
    
    // 排序
    sort(students.begin(), students.end(), compare);
    
    // 输出前五名学生信息
    for (int i = 0; i < 5; ++i) {
        cout << students[i].id << " " << students[i].total << endl;
    }
    
    return 0;
}

标签:07NOIP,语文,成绩,排序,学生,89,总分,奥赛,1938
From: https://blog.csdn.net/lan_in/article/details/137399651

相关文章

  • 信息学奥赛一本通题目解析:1415:【17NOIP普及组】图书管理员(字符串)
    【题目描述】图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。小D刚刚当上图书馆的管理员,她知......
  • 信息学奥赛一本通题目解析:1204:爬楼梯(记忆化递归)
    【题目描述】树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。【输入】输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤N≤30。【......
  • 初三奥赛模拟测试3
    初三奥赛模拟测试3T1网格图开幕雷击,T1先做2h,糊了个玄学复杂度的做法,会被点叉相交的数据卡,不过数据水,放过去了。考虑正解,枚举正方形可能出现的情况,对于每个正方形,尝试从上一个正方形转移,经过一些预处理,可以做到$O(n)$转移。懒得写正解了,去看其他HZOIers的题解吧T2序......
  • 初三奥赛模拟测试3
    前言我们的\(Shadow\)又\(41\)秒\(AC\)\(T0\)啦!是的又换题了,大多数人都做过,但是我没做过啊\(qwq\)。于是从别的地方扒了\(4\)道题,前两道是\(NOIP\)模拟赛的题,后两道从\(NOI\)模拟赛扒来的,知识点根本不会\(qwq\)。比赛链接T1网络图点击查看题面部......
  • HZOI初三奥赛模拟测试3-T2
    \(HZOI\)初三奥赛模拟测试\(3-T2\)题目描述给定序列\(a_1,a_2,\dotsa_n\),现在可以选择删除一些数,使得删除后\(\sum[a_i=i]\)最大做题历程一下午就做了这一个题,打到最后才发现时间复杂度\(O(\frac{n^2}{2})\)过不去,没时间优化了,最后\(73pts\),赛时最高,好像因为我多剪......
  • 13.【初三奥赛模拟测试2】
    估计也打不了多少\(qwq\)\(\Huge终于不垫底了。qwq\)初三奥赛模拟测试2T1南题解一道概率期望。一般都是从\(n\)开始递推到\(0\)。假设我们现在有\(i\)种枪,那么期望次数\[\largef_i=f_{i+1}+\fracn{n-i}\]因为当前有\(i\)种可能买到已经买过的枪,\(n-i\)......
  • 初三奥赛模拟测试2
    前言比赛链接——南昌起义。这辈子第一次\(rk~1\)。\(T1:\)概率期望,本来没学过,现学的(蓝书没看懂,还是网上的博客好理解),然后发现毕竟\(T1\)没那么难,知道概率期望是啥还是能做的。\(T2:\)本来看\(T1\)概率期望想先开\(T2\)的,但是发现不会就去学概率期望了,后来发......
  • 信息学奥赛一本通:1146:判断字符串是否为回文
    【题目描述】输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。【输入】输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。【输出】如果字符串是回文,输出yes;否则,输出no。【输入样例】abcdedcba【输出样例】yes【参考程序......
  • 信息学奥赛一本通题目解析:2086:【22CSPJ普及组】乘方(pow)
    2086:【22CSPJ普及组】乘方(pow)题目描述小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数aaa和b......
  • 关于信息学奥赛中的一些做题思路
    观前须知Sugar_Cube的博客园主页背景介绍本文记录了笔者在刷题或比赛中运用到的一些做题思路可以适当参考正文LuoguP2048超级钢琴首先显然有\(\mathcal{O}(n^2)\)暴力枚举每个子段,然后选择其中前k大的那么可以发现有贪心策略:选择k次最大值那么考虑怎样求最大值想......