콘테스트 (Contest)
시간 제한1초메모리 제한1024 MB
대회 로그를 시간 순서대로 읽고 오답 감점을 포함한 문제별 점수 공식으로 각 참가자의 총점을 계산한다.
문제
세상에는 다양한 프로그래밍 콘테스트가 있다. 예를 들어 정보 올림피아드, ACM-ICPC, ICFP처럼 전 세계의 상대와 겨루는 대회도 있고, Supercomputing Contest, 파소콘 갑자원, EPOCH @마츠야마 같은 국내 대회도 있어서 이루 다 헤아릴 수 없다.
이런 콘테스트에 참가하다 보면 직접 콘테스트를 열고 싶어지는 사람도 나타난다. 당신의 친구도 그중 한 명이다. 친구는 콘테스트 문제 준비로 바빠서, 콘테스트 로그로부터 참가자의 점수를 계산하는 프로그램 작성을 당신에게 부탁해 왔다. 친구의 콘테스트가 성공하도록, 틀림없는 점수 계산 프로그램을 만들어 주었으면 한다.
콘테스트 참가자는 N명, 문제는 M개, 경기 시간은 T초이다. 참가자에게는 1부터 N까지의 번호가 부여된다. 문제에도 1부터 M까지의 번호가 부여된다.
이 콘테스트에서 각 참가자는 문제마다 문제 지문을 열람하고, 문제를 풀고, 답안 소스 코드를 제출한다. 경기는 시각 0에 시작해서 시각 T에 끝난다. 참가자가 문제를 열람하면 시각과 참가자 번호와 문제 번호가 로그에 정보 1건으로 기록된다. 참가자가 답안 소스 코드를 제출하면 시각과 참가자 번호와 문제 번호와 답안 소스 코드의 정오가 로그에 정보 1건으로 기록된다.
각 참가자는 콘테스트 시작부터 1초마다 "어떤 문제를 열람한다" 또는 "어떤 문제의 소스 코드를 제출한다" 중 하나를 한 번 할 수 있다. 열람하기 전에 그 문제의 소스 코드를 제출하거나, 정답을 맞은 뒤 다시 소스 코드를 제출할 수는 없다.
참가자 j가 문제 i를 시각 Sij에 열람하고, wij회의 오답 소스 코드를 제출한 뒤 시각 Eij에 정답 소스 코드를 제출했을 때의 점수는,
(pi − (Eij − Sij) − 120wij)와 X 중 큰 쪽
이다. 단, pi는 문제 i의 배점, X는 문제 번호에 의존하지 않는 정답을 맞았을 때의 최저 점수이다.
경기가 끝날 때까지 정답을 맞히지 못한 문제의 점수는 0점이다.
각 참가자의 점수는 그 참가자의 문제별 점수의 합이다.
N, M, T, X, 로그에 포함된 정보의 건수, 각 문제의 배점, 로그의 내용이 주어졌을 때 각 참가자의 점수를 계산하는 프로그램을 작성하시오.
입력
표준 입력에서 다음 입력을 읽는다.
- 1행에는 참가자 수 N, 문제 수 M, 경기 시간 T, 정답 문제의 최저 점수 X, 로그의 건수 Y가 공백을 구분으로 쓰여 있다.
- 이어지는 M행 중 i행에는 문제 i의 점수를 나타내는 정수 pi가 쓰여 있다.
- 이어지는 Y행은 로그의 내용을 나타낸다. 그중 k행에는 로그의 k번째 정보가 쓰여 있으며, 그 정보가 기록된 시각을 나타내는 정수 tk, 참가자 번호를 나타내는 정수 nk, 문제 번호를 나타내는 정수 mk, 그리고 "open", "correct", "incorrect" 중 하나의 문자열이 공백으로 구분되어 쓰여 있다. "open"은 문제를 열람했음을 나타낸다. "correct"는 제출한 소스 코드가 정답이었음을 나타낸다. "incorrect"는 제출한 소스 코드가 오답이었음을 나타낸다.
출력
표준 출력에 다음 데이터를 출력한다.
- 데이터는 N행으로 이루어지며, j행은 j번 참가자의 점수를 포함한다.
제한
- 1 ≤ N ≤ 1,000 참가자 수
- 1 ≤ M ≤ 10 문제 수
- 100 ≤ T ≤ 10,000 콘테스트의 경기 시간
- 1 ≤ X ≤ 100 정답 문제의 최저 점수
- 0 ≤ Y ≤ 10,000 로그에 포함된 정보의 건수
- X ≤ pi ≤ T 문제 i의 배점
- 0 ≤ t1 ≤ t2 ≤ . . . ≤ tk ≤ . . . ≤ tY ≤ T 로그의 k번째 정보가 기록된 시각을 나타내는 정수
- 1 ≤ nk ≤ N 로그의 k번째 정보에 포함된 참가자 번호
- 1 ≤ mk ≤ M 로그의 k번째 정보에 포함된 문제 번호