GPA
시간 제한2초메모리 제한512 MB
과목별 학점과 전공 필수 과목, 학생별 성적이 주어질 때 각 학생의 전체 GPA와 모든 필수 과목을 이수한 전공의 GPA를 출력한다.
문제
많은 학생에게 졸업할 때 중요한 것은 단 하나의 숫자, 바로 GPA다. 하지만 많은 고용주는 CSCI나 EE 학생이 "종이접기 입문"에서 어떤 성적을 받았는지에는 그다지 관심이 없는 듯하다. 그보다는 CSCI104, CSCI270, CSCI360에서의 성적을 더 신경 쓰는 것 같다. 이상한 일이다. 그 결과 "전공 GPA"라는 것이 생겼는데, 여기에는 "전공에 포함되는" 과목만 들어간다. 그런데 복수전공이나 삼중전공을 하고 있다면, 여러 전공의 GPA를 모두 계산하는 일은 꽤 시간이 많이 걸린다. 이런 일은 컴퓨터가 하는 게 맞지 않은가? 사실 그렇다. 지적해 줘서 고맙다!
어떤 대학의 전체 교과목 목록(과목 이름과 학점)과 각 전공의 전공 요건이 주어진다. 그다음에는 학생 목록이 주어지고, 각 학생이 수강한 모든 과목과 받은 성적이 주어진다. 각 학생에 대해 전체 GPA와, 그 학생이 모든 요건을 충족한 각 전공의 GPA를 출력한다. GPA는 가중 평균이다. 학생이 수강한 각 과목에 대해 학생의 성적(0.0에서 4.0 사이의 수)에 그 과목의 학점을 곱한다. 마지막으로 이 가중 성적의 합을 학생이 수강한 총 학점으로 나눈다. 이것이 학생의 GPA다. 전공 GPA도 비슷하지만, 해당 전공에 관련된 과목만 합산한다.
입력
첫째 줄에는 입력 데이터 세트의 수 이 주어진다. 그다음에는 다음과 같은 형식의 데이터 세트 개가 이어진다.
데이터 세트의 첫째 줄에는 세 정수 , , 이 주어진다. 이는 각각 과목의 수, 전공의 수, 졸업하는 학생의 수다.
그다음에는 개의 줄이 이어지며, 각 줄은 과목 의 이름 와 학점 를 준다. 이름은 2~4개의 대문자 뒤에 정확히 3자리 숫자가 바로 이어진다. 학점은 1 이상 6 이하의 정수다.
다음에는 개의 전공이 주어진다. 전공 의 첫째 줄에는 2~4개의 대문자로 된 문자열(전공 이름)과, 그 전공이 요구하는 과목 수 (정수)가 주어진다. 그다음에는 개의 줄이 이어지며, 각 줄에는 과목 이름이 정확히 하나씩 들어 있다. 과목 이름은 처음 개 줄에 나온 올바른 이름이다. 어떤 전공의 총 학점도 최대 128을 넘지 않는다.
마지막으로 명의 학생이 주어진다. 각 학생 에 대해, 먼저 그 학생이 수강한 과목 수 (정수)가 주어진다. 그다음에는 개의 줄이 이어지며, 각 줄에는 과목 이름(처음 개 줄에 나온 올바른 문자열)과 그 과목에서 받은 성적(0.0에서 4.0 사이의 부동 소수점 수)이 주어진다. 어떤 학생도 총 200학점을 넘게 수강하지 않는다. 또한 어떤 학생도 같은 과목을 두 번 수강하지 않는다.
출력
각 데이터 세트에 대해 먼저 "Data Set x:"를 한 줄에 단독으로 출력한다. 여기서 x는 데이터 세트의 번호다. 그다음에는 각 학생에 대해 전체 GPA와 해당되는 모든 전공 GPA를 입력 파일에 나열된 전공 순서대로 출력한다. 구체적으로는 먼저 "Student k"를 한 줄에 출력한다. 여기서 k는 학생의 번호다. 그다음에는 학생의 GPA를 한 줄에 출력한다. 이어서 학생이 필수 과목을 모두 수강한 각 전공에 대해, 전공 이름과 그 전공에서의 학생 GPA를 출력한다. (형식은 아래를 참고한다.) 모든 GPA는 소수점 둘째 자리로 반올림한다. 각 데이터 세트 뒤에는 빈 줄을 출력한다.