Google Code Jam 2018 - Bathroom Stalls

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

Bathroom Stalls

Một nhà vệ sinh có \(N+2\) buồng trên một hàng. Hai buồng ngoài cùng bên trái và bên phải bị nhân viên bảo vệ chiếm vĩnh viễn; \(N\) buồng còn lại dành cho người dùng.

Mỗi khi có người bước vào, họ cố chọn buồng xa những người khác nhất. Để tránh nhập nhằng, họ tuân theo quy tắc tất định. Với mỗi buồng trống \(S\), tính \(L_S\)\(R_S\), lần lượt là số buồng trống nằm giữa \(S\) và buồng có người gần nhất về bên trái và bên phải. Trước hết chỉ xét những \(S\) tối đa hóa \(\min(L_S,R_S)\). Nếu chỉ có một buồng thì chọn nó; nếu còn hòa, trong số ấy chọn buồng tối đa hóa \(\max(L_S,R_S)\). Nếu vẫn còn nhiều buồng hòa nhau, chọn buồng ngoài cùng bên trái.

\(K\) người sắp lần lượt bước vào; mỗi người chọn xong trước khi người kế tiếp đến và không ai rời đi. Khi người cuối cùng chọn buồng \(S\), hai giá trị \(\max(L_S,R_S)\)\(\min(L_S,R_S)\) bằng bao nhiêu?

Dữ liệu vào

Dòng đầu chứa số test \(T\). Tiếp theo là \(T\) dòng, mỗi dòng mô tả một test bằng hai số nguyên \(N,K\) như trên.

Dữ liệu ra

Với mỗi test, in Case #x: y z, trong đó x là số thứ tự test, y\(\max(L_S,R_S)\)z\(\min(L_S,R_S)\) mà người thứ \(K\) tính cho buồng đã chọn.

Ràng buộc

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

Phân nhóm

  • Small Dataset 1 (Test Set 1, hiển thị): \(1\le N\le1000\).
  • Small Dataset 2 (Test Set 2, hiển thị): \(1\le N\le10^6\).
  • Large Dataset (Test Set 3, ẩn): \(1\le N\le10^{18}\).

Đ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 5/30 16,67%
Test Set 2 10/30 33,33%
Test Set 3 15/30 50%

Ví dụ

Ví dụ 1

Input
5
4 2
5 2
6 2
1000 1000
1000 1
Output
Case #1: 1 0
Case #2: 1 0
Case #3: 1 1
Case #4: 0 0
Case #5: 500 499
Note

Test 1: người đầu chọn ô giữa bên trái, người thứ hai chọn ngay bên phải và còn các khoảng 1, 0. Test 2: người đầu chọn chính giữa rồi người thứ hai chọn khoảng trái. Test 3: người thứ hai chọn giữa đoạn ba ô trống nên còn 1, 1. Test 4 cuối cùng mọi buồng đều kín. Test 5 chỉ có một người, chọn ô giữa bên trái nên còn 500, 499.

Nguồn

Google Code Jam 2018, Vòng luyện tập, bài Bathroom Stalls.

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: