洛谷1093 [NOIP2007 普及组] 奖学金
时间: 2023-08-17 20:08:26 浏览: 202
洛谷1093 [NOIP2007 普及组] 奖学金是一道算法题,出自国内在线编程平台洛谷的题库。这道题目是2007年全国信息学奥林匹克普及组的一道题目,也是NOIP(全国青少年信息学奥林匹克竞赛)的一部分。
题目描述如下:给定N个申请者的学业成绩、面试成绩、论文成绩和奖金数额,按照一定的规则来确定奖学金的分配。规则如下:
1. 学业成绩高于80分且有论文成绩的申请者可获得奖金8000元;
2. 学业成绩高于85分且面试成绩高于80分的申请者可获得奖金4000元;
3. 学业成绩高于90分的申请者可获得奖金2000元;
4. 学业成绩高于85分且有奖金的申请者可获得奖金1000元;
5. 面试成绩高于80分且有论文成绩的申请者可获得奖金850元。
要求编写一个程序,根据给定的N个申请者的相关信息,计算出总共发放的奖金数额。
这道题目主要考察对条件判断和基本计算的理解和运用。你可以通过编写一个程序来解决这个问题,根据每个申请者的成绩和条件进行判断,然后计算出总共发放的奖金数额。希望能对你有所帮助!
相关问题
p1093 [noip2007 普及组] 奖学金
题目描述:
某校有n个学生,编号为1~n,每个学生有ai个不同的奖学金,现在要将这些奖学金分给这n个学生。规定编号为i的学生最多只能得到bi个奖学金,同时规定相同奖学金的奖学金数量也不能超过ci个。问最多能分出多少个奖学金。
输入格式:
第一行包含一个整数n。
接下来n行,每行包含三个整数ai,bi,ci。
输出格式:
一个整数,表示最多能分出的奖学金数量。
输入样例:
5
5 2 2
3 3 1
3 2 1
4 3 3
5 5 3
输出样例:
6
算法1
(贪心) $O(nlogn)$
首先按照奖学金数量从大到小排序,然后从大到小依次分配奖学金,直到某个学生分配满了或者某个奖学金数量已经分配完了。
时间复杂度
排序的时间复杂度为O(nlogn),分配奖学金的时间复杂度为O(n),因此总时间复杂度为O(nlogn)。
C++ 代码
算法2
(贪心) $O(nlogn)$
首先按照奖学金数量从大到小排序,然后从大到小依次分配奖学金,直到某个学生分配满了或者某个奖学金数量已经分配完了。
时间复杂度
排序的时间复杂度为O(nlogn),分配奖学金的时间复杂度为O(n),因此总时间复杂度为O(nlogn)。
C++ 代码
P1093 [NOIP2007 普及组] 奖学金
P1093 [NOIP2007 普及组] 的奖学金问题要求你按照特定的规则对学生进行排序。首先,对于每个学生,你需要计算他们的总分,这通常是三门课程分数之和。接着,如果有两个学生的总分相同,你需要比较他们的语文成绩;如果语文成绩也一样,则按照学号从小到大决定排名。排序完成后,你需要输出前五名学生的学号和总分,确保每个学生的奖学金(即排名)是唯一的。
为了实现这个功能,你可以编写一个Python程序,如下所示:
```python
# 假设学生信息存储在一个字典列表中,如 [{'name': 'student1', 'scores': [80, 90, 95]}, ...]
students = [
{'name': 'student1', 'scores': [80, 90, 95]},
# 更多学生...
]
# 计算总分并排序
sorted_students = sorted(students, key=lambda s: (-sum(s['scores']), -s['scores'][0], s['name']))
# 只取前五名
top_five = sorted_students[:5]
# 输出前五名的学生信息
for i, student in enumerate(top_five, start=1):
print(f"{i}. {student['name']}: 总分={sum(student['scores'])}")
```
在这个程序中,`key=lambda s: (-sum(s['scores']), -s['scores'][0], s['name'])` 定义了一个排序的关键字,它首先降序排列总分,然后降序排列语文成绩,最后升序排列学号。
阅读全文
相关推荐














