Skip to content

21759: P大卷王查询系统

http://cs101.openjudge.cn/routine/21759/

古人云:“开卷有益”。但是,著名的社会学家小明认为内卷是有害的,并且他正在写一篇与P大内卷现状有关的论文,需要选取具有代表性的“卷王”们进行访谈。小明现在搞到了一份长长的成绩单,拜托你写个程序,帮他找出成绩单上的“卷王”们。

小明把“卷王”定义为:学过的课程数量大于等于x门,且课程得分平均分大于y的学生。

输入

第1行:三个用空格分隔的整数n,x,y,1 <= n <= 100000,x >= 0,0 <= y <= 100 第2~(n+1)行:每行有用空格分隔的两个字符串和一个整数,前两个字符串分别代表课程名和学生名,最后一个整数代表这个学生在此课程中取得的成绩。输入保证课程名和学生名只包含字母,且一个学生在一个课程中不会出现两次成绩。输入不保证任何顺序。

第n+2行:一个整数m,代表查询的个数,1 <= m <= 1000

第(n+3)~(n+m+2)行:每行是一个查询字符串,代表学生名,数据保证学生名一定在前面出现过。

输出

输出为m行,对于每个查询,如果这个学生是卷王,输出yes;如果不是卷王,输出no,注意,输出都是小写。

样例输入

7 3 90
JiSuanGaiLunA XiaoWang 100
JiSuanGaiLunA XiaoZhang 98
GaoDengShuXue XiaoHong 90
GaoDengShuXue XiaoWang 99
MeiRenLiJieJiSuanJiXiTong XiaoWang 93
PythonCongRuMengDaoFangQi XiaoHong 92
JiSuanGaiLunA XiaoHong 88
3
XiaoWang
XiaoHong
XiaoZhang

样例输出

yes
no
no

提示: 要用字典,否则会超时

来源: 何昊高洁

python
# gpt
def find_juanwang(n, x, y, grades, m, queries):
    # 创建一个字典用于存储学生的课程和成绩
    student_grades = {}

    # 遍历成绩单,将学生的成绩添加到字典中
    for i in range(n):
        course, student, grade = grades[i]
        if student not in student_grades:
            student_grades[student] = []
        student_grades[student].append(grade)

    # 遍历查询列表,判断每个学生是否为卷王
    results = []
    for i in range(m):
        student = queries[i]
        if student in student_grades and len(student_grades[student]) >= x:
            average_grade = sum(student_grades[student]) / len(student_grades[student])
            if average_grade > y:
                results.append("yes")
            else:
                results.append("no")
        else:
            results.append("no")

    return results

# 读取输入
n, x, y = map(int, input().split())
grades = []
for _ in range(n):
    course, student, grade = input().split()
    grade = int(grade)
    grades.append((course, student, grade))

m = int(input())
queries = []
for _ in range(m):
    query = input()
    queries.append(query)

# 调用函数进行查询
results = find_juanwang(n, x, y, grades, m, queries)

# 输出结果
for result in results:
    print(result)
python
n, x, y = map(int, input().split())
grades = [input().split() for _ in range(n)]
m = int(input())
queries = [input() for _ in range(m)]

student_grades = {}
for course, student, grade in grades:
    student_grades.setdefault(student, []).append(int(grade))

results = ["yes" if student in student_grades and 
           len(student_grades[student]) >= x and 
           sum(student_grades[student]) / len(student_grades[student]) > y 
           else "no" for student in queries]

print('\n'.join(results))