Google Code Jam 2015 - Standing Ovation

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 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Đêm khai mạc opera đã đến, và bạn của bạn là prima donna (nữ ca sĩ chính). Bạn không có mặt trong khán phòng, nhưng muốn chắc chắn rằng cô ấy nhận được một màn đứng dậy vỗ tay: mọi khán giả đều đứng lên và vỗ tay cho cô.

Ban đầu, toàn bộ khán giả đều ngồi. Mỗi người có một mức độ e ngại. Người có mức \(S_i\) sẽ chờ cho đến khi ít nhất \(S_i\) khán giả khác đã đứng dậy vỗ tay; ngay khi điều đó xảy ra, người ấy cũng lập tức đứng lên vỗ tay. Nếu \(S_i=0\), người ấy luôn đứng dậy ngay, bất kể những người khác làm gì. Chẳng hạn, người có \(S_i=2\) vẫn ngồi lúc đầu, nhưng sẽ đứng lên sau khi thấy ít nhất hai người khác đang đứng và vỗ tay.

Bạn biết mức độ e ngại của tất cả khán giả và sẵn sàng mời thêm bạn của prima donna để cuối cùng cả khán phòng đều đứng lên. Mỗi người bạn được mời có thể mang bất kỳ mức độ e ngại nào bạn muốn, không nhất thiết giống nhau. Hỏi cần mời ít nhất bao nhiêu người để bảo đảm có một màn đứng dậy vỗ tay?

Dữ liệu vào

Dòng đầu chứa số bộ test \(T\).

Mỗi test gồm một dòng chứa \(S_{max}\), mức lớn nhất của người e ngại nhất trong khán phòng, tiếp theo là một chuỗi gồm \(S_{max}+1\) chữ số. Chữ số thứ \(k\) của chuỗi (đếm từ 0) là số khán giả có mức e ngại \(k\). Ví dụ, 409 nghĩa là có bốn người với \(S_i=0\), chín người với \(S_i=2\), và không có ai với \(S_i=1\) hay mức nào khác. Ban đầu luôn có từ 0 đến 9 người ở mỗi mức.

Chuỗi không bao giờ kết thúc bằng 0; do đó khán phòng luôn có ít nhất một người.

Dữ liệu ra

Với mỗi test, in một dòng Case #x: y, trong đó \(x\) là số thứ tự test (bắt đầu từ 1) và \(y\) là số bạn ít nhất phải mời.

Ràng buộc

  • \(1\le T\le100\).

Phân nhóm

  • Nhỏ: \(0\le S_{max}\le6\).
  • Lớn: \(0\le S_{max}\le1000\).

Điểm các phân nhóm

Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.

Phân nhóm Điểm Google Code Jam Tỷ lệ điểm của bài
Test Set 1 7/17 41,18%
Test Set 2 10/17 58,82%

Ví dụ

Ví dụ 1

Input
4
4 11111
1 09
5 110011
0 1
Output
Case #1: 0
Case #2: 1
Case #3: 2
Case #4: 0
Note

Ở test 1, khán giả tự tạo được màn đứng dậy vỗ tay: người có \(S_i=0\) đứng trước, rồi người có \(S_i=1\), và cứ thế tiếp tục.

Ở test 2, phải mời một người bạn có \(S_i=0\), và chỉ một người đó là đủ để cả khán phòng đứng lên.

Ở test 3, một phương án tối ưu là thêm hai khán giả có \(S_i=2\).

Ở test 4, chỉ có một khán giả và người ấy đứng lên ngay lập tức; không cần mời ai.

Nguồn

Google Code Jam 2015, Vòng loại, bài Standing Ovation.

Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.

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: