contest - コンテスト (Contest) Editorial /

Time Limit: 1 sec / Memory Limit: 64 MiB

AtCoder での提出方法

入力は標準入力から読み込み,出力は標準出力に行うこと.

配点 : 100 点

問題文

世の中には様々なプログラミングコンテストがある.例えば,情報オリンピック,ACM-ICPC,ICFP の様に世界中の相手と競い合う物や,Supercomputing Contest,パソコン甲子園,EPOCH @まつやまの国内大会などなど,枚挙にいとまがない.

そのようなコンテストに参加していると自分でコンテストを開催したいと考える人もあらわれる.あなたの友人もそんな一人である.友人はコンテストの問題準備に忙しく,コンテストのログから参加者の得点を計算するプログラムの作成をあなたに依頼してきた.是非とも友人のコンテストが成功するように,間違いのない得点計算プログラムを作ってあげて欲しい.

コンテストの参加者は N 人で,問題が M 問で,競技時間が T 秒である.参加者には 1 から N までの番号が割り振られている.問題にも 1 から M までの番号が振られている.

このコンテストでは,各参加者は問題毎に,問題文を閲覧し,問題を解き,解答のソースコードを提出する.競技は時刻 0 からはじまり,時刻 T で終了する.参加者が問題を閲覧すると,時刻と参加者番号と問題番号がログに 1 件の情報として記録される.参加者が解答ソースコードを提出すると,時刻と参加者番号と問題番号と解答ソースコードの正誤がログに 1 件の情報として記録される.

各参加者はコンテスト開始から 1 秒毎に「ある問題を閲覧する」か「ある問題のソースコードを提出する」のいずれかを 1 回行うことが出来る.閲覧前にその問題のソースコードを提出する事や,正解後に再度ソースコードを提出する事は出来ない.

参加者 j が問題 i を,時刻 S_{ij} に閲覧し,w_{ij} 回の不正解のソースコードを提出後,時刻 E_{ij} に正解のソースコードを提出したときの得点は,

\left(p_i - (E_{ij} - S_{ij}) - 120w_{ij}\right) と X のうち大きい方

である.ただし,p_{i} は問題 i の配点,X は問題番号に依存しない正解した時の最低得点である.

競技終了までに,正解しなかった問題の得点は 0 点である.

各参加者の得点は,その参加者の問題毎の得点の合計である.

課題

N,M,T,X, ログに含まれる情報の件数,各問題の配点,および,ログの内容が与えられたときに各参加者の得点を計算するプログラムを作成せよ.

制約

  • 1 \leqq N \leqq 1{,}000:参加者数.
  • 1 \leqq M \leqq 10:問題数.
  • 100 \leqq T \leqq 10{,}000:コンテストの競技時間.
  • 1 \leqq X \leqq 100:正解問題の最低得点.
  • 0 \leqq Y \leqq 10{,}000:ログに含まれる情報の件数.
  • X \leqq p_i \leqq T:問題 i の配点.
  • 0 \leqq t_1 \leqq t_2 \leqq \cdots \leqq t_k \leqq \cdots \leqq t_Y \leqq T:ログの k 番目の情報が記録された時刻を表す整数.
  • 1 \leqq n_k \leqq N:ログの k 番目の情報に含まれる参加者番号.
  • 1 \leqq m_k \leqq M:ログの k 番目の情報に含まれる問題番号.

入力

標準入力から以下の入力を読み込め.

  • 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” は提出したソースコードが不正解であったことを表す.

出力

標準出力に以下のデータを出力せよ.

  • データは N 行からなり,j 行目は j 番の参加者の得点を含む.

入力例 1

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

出力例 1

410

1 番の参加者は,1 問目で 30 点,2 問目で 380 点,3 問目で 0 点を獲得する.2 問目の得点は

1000[\text{問題 2 の配点}] - (600[\text{正解時刻}] - 100[\text{閲覧時刻}]) - 120 \times 1[\text{不正解,1 回}]

で計算される.

入力例 2

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

出力例 2

392
1390
778

参加者が複数の場合,同じ時刻に複数の情報が記録されている場合がある.


Source Name

JOI 2009-2010 春季トレーニング合宿 Contest Day4