Google Code Jam 2011 - Expensive Dinner

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

Tất cả bạn bè của bạn sẽ đi ăn tối tại một nhà hàng tối nay. Họ đều rất giỏi toán, nhưng họ cũng rất kỳ lạ: người bạn thứ \(a\) của bạn (bắt đầu từ 1) sẽ không vui trừ khi tổng chi phí của bữa ăn là một số nguyên dương và chia hết cho \(a\).

Các bạn của bạn lần lượt vào nhà hàng từng người một. Ngay khi có ai đó bước vào nhà hàng, nếu người đó không vui thì cả nhóm sẽ gọi phục vụ ngay lập tức.

Miễn là có ít nhất một người không vui trong nhà hàng, một trong những người không vui đó sẽ mua món đồ có giá thấp nhất để làm cho anh ta hoặc cô ta vui. Điều này sẽ tiếp tục cho đến khi không còn ai trong nhà hàng không vui, và sau đó người phục vụ sẽ rời đi. May mắn thay, nhà hàng bán đồ ăn ở mọi mức giá nguyên dương. Xem phần giải thích của ví dụ đầu tiên để biết thêm chi tiết.

Các bạn của bạn có thể chọn vào nhà hàng theo bất kỳ thứ tự nào. Sau khi người phục vụ đã được gọi, nếu có nhiều hơn một người không vui trong nhà hàng, bất kỳ ai trong số những người không vui đó đều có thể chọn mua một thứ gì đó trước. Cách thức thực hiện tất cả các lựa chọn đó có thể ảnh hưởng đến số lần nhóm gọi phục vụ.

Là chủ nhà hàng, bạn thuê một số người phục vụ rất mệt mỏi. Bạn muốn tính độ chênh lệch (spread) của những người bạn của mình: sự khác biệt giữa số lần tối đa họ có thể gọi phục vụ và số lần tối thiểu họ có thể gọi phục vụ.

Dữ liệu vào

Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ test, \(T\). \(T\) bộ test tiếp theo, mỗi bộ trên một dòng. Mỗi bộ test sẽ chứa một số nguyên \(N\), số lượng bạn bè mà bạn có.

Dữ liệu ra

Đối với mỗi bộ test, hãy xuất một dòng chứa "Case #x: y", trong đó x là số thứ tự của bộ test (bắt đầu từ 1) và y là độ chênh lệch cho bộ test đó.

Ràng buộc

  • \(1 \le T \le 100\).
  • \(1 \le N \le 1000\) (Dữ liệu nhỏ).
  • \(1 \le N \le 10^{12}\) (Dữ liệu lớn).

Phân nhóm

Các giới hạn cho tập nhỏ và tập lớn được nêu ở trên.

Đ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 13/30 43,33%
Test Set 2 17/30 56,67%

Ví dụ

Ví dụ 1

Input
4
1
3
6
16
Output
Case #1: 0
Case #2: 1
Case #3: 2
Case #4: 5
Note

Trong Case #2, giả sử các bạn của bạn đến theo thứ tự \([1, 2, 3]\). Đầu tiên #1 đến; không vui; gọi phục vụ; và mua thứ gì đó giá 1. Bây giờ không ai không vui. Tiếp theo #2 đến; không vui; gọi phục vụ; và mua thứ gì đó giá 1 (tổng cộng là 2). Bây giờ không ai không vui. Tiếp theo #3 đến; không vui; gọi phục vụ; và mua thứ gì đó giá 1 (tổng cộng là 3). Bây giờ #2 không vui, và mua thứ gì đó giá 1 (tổng cộng là 4). Bây giờ #3 không vui, và mua thứ gì đó giá 2 (tổng cộng là 6). Cuối cùng không ai không vui, và người phục vụ đã được gọi ba lần.

Giả sử thay vào đó các bạn của bạn đến theo thứ tự \([3, 1, 2]\). Đầu tiên #3 đến; không vui; gọi phục vụ; và mua thứ gì đó giá 3. Bây giờ không ai không vui. Tiếp theo #1 đến; không ai không vui. Tiếp theo #2 đến; không vui; gọi phục vụ; và mua thứ gì đó giá 1 (tổng cộng là 4). Bây giờ #3 không vui, và mua thứ gì đó giá 2 (tổng cộng là 6). Bây giờ không ai không vui, và người phục vụ đã được gọi hai lần. Độ chênh lệch là \(3 - 2 = 1\).

Nguồn

Google Code Jam 2011, Vòng 2, bài Expensive Dinner.

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: