JOI 2010 - Contest

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 800 (p) Thời gian: 1.0s Bộ nhớ: 64M Input: bàn phím Output: màn hình

Trên thế giới có vô số cuộc thi lập trình: từ những cuộc thi mà người tham gia tranh tài với các đối thủ trên khắp thế giới như Olympic Tin học, ACM-ICPC và ICFP, đến các cuộc thi trong nước Nhật Bản như Supercomputing Contest, Cuộc thi Máy tính Koshien và EPOCH tại Matsuyama.

Sau khi tham gia những cuộc thi như vậy, một số người muốn tự tổ chức một cuộc thi. Bạn của bạn cũng là một người như thế. Vì bận chuẩn bị đề thi, người bạn ấy nhờ bạn viết chương trình tính điểm của các thí sinh từ nhật ký cuộc thi. Hãy viết một chương trình tính điểm chính xác để góp phần giúp cuộc thi của bạn mình thành công.

Cuộc thi có \(N\) thí sinh, \(M\) bài toán và kéo dài \(T\) giây. Các thí sinh được đánh số từ \(1\) đến \(N\), còn các bài toán được đánh số từ \(1\) đến \(M\).

Với mỗi bài toán, thí sinh xem đề, giải bài rồi nộp mã nguồn lời giải. Cuộc thi bắt đầu ở thời điểm \(0\) và kết thúc ở thời điểm \(T\). Khi một thí sinh xem đề, thời điểm, số hiệu thí sinh và số hiệu bài toán được ghi thành một bản ghi trong nhật ký. Khi một thí sinh nộp mã nguồn lời giải, thời điểm, số hiệu thí sinh, số hiệu bài toán và kết quả đúng hay sai của mã nguồn được ghi thành một bản ghi trong nhật ký.

Kể từ khi cuộc thi bắt đầu, mỗi giây, mỗi thí sinh có thể thực hiện một lần một trong hai thao tác: xem đề của một bài toán hoặc nộp mã nguồn cho một bài toán. Thí sinh không thể nộp mã nguồn cho một bài toán trước khi xem đề của bài đó, cũng không thể nộp thêm mã nguồn cho bài đó sau khi đã nộp đúng.

Giả sử thí sinh \(j\) xem đề bài \(i\) ở thời điểm \(S_{ij}\), nộp sai \(w_{ij}\) lần rồi nộp đúng ở thời điểm \(E_{ij}\). Điểm của thí sinh đó cho bài toán này là

\[ \max\bigl(p_i-(E_{ij}-S_{ij})-120w_{ij},\ X\bigr). \]

Ở đây, \(p_i\) là số điểm của bài \(i\), còn \(X\) là điểm tối thiểu khi giải đúng một bài, không phụ thuộc vào số hiệu bài toán. Nếu đến khi cuộc thi kết thúc mà thí sinh chưa nộp đúng một bài thì điểm của bài đó là \(0\). Tổng điểm của một thí sinh là tổng điểm của thí sinh đó trên tất cả các bài toán.

Yêu cầu

Cho \(N\), \(M\), \(T\), \(X\), số bản ghi trong nhật ký, số điểm của từng bài toán và nội dung nhật ký, hãy viết chương trình tính tổng điểm của từng thí sinh.

Dữ liệu vào

Đọc dữ liệu từ đầu vào chuẩn.

  • Dòng đầu tiên chứa năm số nguyên \(N\), \(M\), \(T\), \(X\), \(Y\), cách nhau bởi dấu cách, lần lượt là số thí sinh, số bài toán, thời gian thi, điểm tối thiểu của một bài giải đúng và số bản ghi trong nhật ký.
  • Trong \(M\) dòng tiếp theo, dòng thứ \(i\) chứa số nguyên \(p_i\), là số điểm của bài toán \(i\).
  • Trong \(Y\) dòng tiếp theo, dòng thứ \(k\) mô tả bản ghi thứ \(k\) của nhật ký, gồm số nguyên \(t_k\) chỉ thời điểm ghi nhận, số nguyên \(n_k\) chỉ số hiệu thí sinh, số nguyên \(m_k\) chỉ số hiệu bài toán và một trong ba chuỗi open, correct, incorrect, cách nhau bởi dấu cách.

Chuỗi open cho biết thí sinh đã xem đề; correct cho biết mã nguồn đã nộp là đúng; incorrect cho biết mã nguồn đã nộp là sai.

Dữ liệu ra

Ghi ra đầu ra chuẩn \(N\) dòng. Dòng thứ \(j\) chứa tổng điểm của thí sinh số \(j\).

Ràng buộc

  • Giới hạn trong kỳ thi gốc: thời gian \(1\) giây, bộ nhớ \(64\) MB.

  • \(1\le N\le 1\,000\).

  • \(1\le M\le 10\).
  • \(100\le T\le 10\,000\).
  • \(1\le X\le 100\).
  • \(0\le Y\le 10\,000\).
  • \(X\le p_i\le T\) với mọi \(1\le i\le M\).
  • Các thời điểm trong nhật ký là số nguyên và thỏa mãn \(0\le t_1\le t_2\le\cdots\le t_Y\le T\).
  • \(1\le n_k\le N\)\(1\le m_k\le M\) với mọi \(1\le k\le Y\).

Phân nhóm

Bài này có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.

Ví dụ

Ví dụ 1

Input
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
Output
410
Giải thích

Thí sinh số \(1\) nhận được \(30\) điểm ở bài thứ nhất, \(380\) điểm ở bài thứ hai và \(0\) điểm ở bài thứ ba. Điểm của bài thứ hai được tính như sau:

Điểm này bằng \(1000-(600-100)-120\times 1=380\).

Trong đó, \(1000\) là số điểm của bài \(2\), \(600\) là thời điểm nộp đúng, \(100\) là thời điểm xem đề và \(1\) là số lần nộp sai.

Ví dụ 2

Input
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
Output
392
1390
778
Giải thích

Khi có nhiều thí sinh, có thể có nhiều bản ghi được ghi nhận tại cùng một thời điểm.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: