PROBLEM LINK:
Author: Baban Gain
Tester: Baban Gain
Editorialist: Baban Gain
DIFFICULTY:
CAKEWALK
PREREQUISITES:
Sorting
PROBLEM:
Given marks, phone number and names of students, print details of students who scored lower than average marks sorted by no. of marks obtained
EXPLANATION:
For a class with N number of students,
Let name, parents phone number and marks obtained by i^{th} student be,
name_i, P_i, and M_i.
To calculate average, we take the sum of M_i and divide it by N.
avg = \frac{\sum{_{i=1}^NM_i}}{N}
Then we iterate through all students, We filter out students whose M_i < avg
Then we sort the students as per the increasing order of their marks and print them.
SOLUTIONS:
Setter's Solution
T = int(input())
for z in range(T):
N = int(input())
details = []
for i in range(N):
name, phone, marks = input().split()
details.append((name, phone, int(marks)))
# Find sum of marks
total = sum(elem[2] for elem in details)
avg = total / N
details.sort(key=lambda x: x[2]) # Sort by score
for student in details:
if student[2] < avg:
print(student[0], student[1], student[2])