Contest(コンテスト) - joi2010-day4
時間制限: 1秒
メモリ制限: 64MB
世の中には様々なプログラミングコンテストがある. 例えば, 情報オリンピック, ACM-ICPC, ICFPの様に世界中の相手と競い合う物や, Supercomputing Contest, パソコン甲子園, EPOCH@まつやまの国内大会などなど, 枚挙にいとまがない.
そのようなコンテストに参加していると自分でコンテストを開催したいと考える人もあらわれる. あなたの友人もそんな一人である. 友人はコンテストの問題準備に忙しく, コンテストのログから参加者の得点を計算するプログラムの作成をあなたに依頼してきた. 是非とも友人のコンテストが成功するように, 間違いのない得点計算プログラムを作ってあげて欲しい.
コンテストの参加者はN人で, 問題がM問で, 競技時間がT秒である. 参加者には1からNまでの番号が割り振られている. 問題にも1からMまでの番号が振られている.
このコンテストでは, 各参加者は問題毎に, 問題文を閲覧し, 問題を解き, 解答のソースコードを提出する. 競技は時刻0からはじまり, 時刻Tで終了する. 参加者が問題を閲覧すると, 時刻と参加者番号と問題番号がログに1件の情報として記録される. 参加者が解答ソースコードを提出すると, 時刻と参加者番号と問題番号と解答ソースコードの正誤がログに1件の情報として記録される.
各参加者はコンテスト開始から1秒毎に「ある問題を閲覧する」か「ある問題のソースコードを提出する」のいずれかを1回行うことが出来る. 閲覧前にその問題のソースコードを提出する事や, 正解後に再度ソースコードを提出する事は出来ない.
参加者jが問題iを, 時刻S[i,j]に閲覧し, w[i,j]回の不正解のソースコードを提出後, 時刻E[i,j]に正解のソースコードを提出したときの得点は,
(p[i] – (E[i,j] – S[i,j] – 120w[i,j])とX のうち大きい方)
である. ただし, p[i]は問題iの配点, Xは問題番号に依存しない正解した時の最低得点である.
競技終了までに, 正解しなかった問題の得点は0点である.
各参加者の得点は, その参加者の問題毎の得点の合計である.
課題(TASK)
N, M, T, X, ログに含まれる情報の件数, 各問題の配点, および, ログの内容が与えられたときに各参加者の得点を計算するプログラムを作成せよ.
制限(CONSTRAINTS)
1 ≤ N ≤ 1,000 | 参加者数 |
1 ≤ M ≤ 10 | 問題数 |
100 ≤ T ≤ 10,000 | コンテストの競技時間 |
1 ≤ X ≤ 100 | 正解問題の最低得点 |
0 ≤ Y ≤ 10,000 | ログに含まれる情報の件数 |
X ≤ p[i] ≤ T | 問題iの配点 |
0 ≤ t1 ≤ t2 ≤ … ≤ t[k] ≤ … ≤ t[Y] ≤ T | ログのk番目の情報が記録された時刻を表す整数 |
1 ≤ n[k] ≤ N | ログのk番目の情報に含まれる参加者番号 |
1 ≤ m[k] ≤ M | ログのk番目の情報に含まれる問題番号 |
入力(INPUT)
標準入力から以下の入力を読み込め.
- 1行目には, 参加者数N, 問題数M, 競技時間T, 正解問題の最低得点X, ログの件数Yが空白を区切りとして書かれている.
- 続くM行のうちi行目には, 問題iの得点を表す整数p[i]が書かれている.
- 続くY行はログの内容を表す. それらのうちのk行目にはログのk番目の情報が書き込まれており, その情報が記録された時刻を表す整数t[k], 参加者番号を表す整数n[k], 問題番号を表す整数m[k], および “open” , “correct” , “incorrect” のいずれかの文字列が空白区切りで書かれている. “open” は問題を閲覧したことを表す. “correct” は提出したソースコードが正解であったことを表す. “incorrect” は提出したソースコードが不正解であったことを表す.
出力(OUTPUT)
標準出力に以下のデータを出力せよ.
- データはN行からなり, j行目はj番の参加者の得点を含む.
入出力例(EXAMPLE)
入力例(Sample Input) | 出力例(Sample Output) |
---|---|
1 3 1200 30 8 50 1000 800 0 1 1 open 100 1 2 open 400 1 1 correct 500 1 2 incorrect 600 1 2 correct 700 1 3 open 800 1 3 incorrect 900 1 3 incorrect |
410 |
1番の参加者は, 1問目で30点, 2問目で380点, 3問目で0点を獲得する. 2問目の得点は 1000[問題2の配点] – ( 600[正解時刻] – 100[閲覧時刻] ) – 120 × 1[不正解, 1回] で計算される.
入力例(Sample Input) | 出力例(Sample Output) |
---|---|
3 2 1000 10 10 878 712 0 2 1 open 0 1 1 open 0 3 1 open 100 3 1 correct 100 2 1 correct 100 1 2 open 200 2 2 open 200 1 2 incorrect 300 1 2 correct 300 2 2 correct |
392 1390 778 |
参加者が複数の場合, 同じ時刻に複数の情報が記録されている場合がある.