Google Code Jam 2022 - Pancake Deque
Xem PDFBánh kếp thường được phục vụ theo chồng, nhưng Infinite House of Pancakes luôn đón nhận thay đổi! Điểm quảng cáo mới của nhà hàng là phục vụ bánh kếp từ một deque, tức hàng đợi hai đầu.
Bạn là nhân viên phục vụ của nhà hàng và nhiệm vụ là phục vụ mọi chiếc bánh trong deque. Khách đến lần lượt từng người và mỗi người nhận một chiếc bánh. Với mỗi khách, bạn phải phục vụ chiếc bánh ngoài cùng bên trái hoặc ngoài cùng bên phải của deque; quyền lựa chọn thuộc về bạn. Khi được phục vụ, chiếc bánh biến mất khỏi deque, để lộ chiếc nằm cạnh nó. Khi chỉ còn một chiếc, lựa chọn duy nhất là phục vụ chiếc ấy, rồi công việc hoàn tất.
Mỗi chiếc bánh có một độ ngon. Vì khách hàng không được chọn bánh, một khách chỉ phải trả tiền nếu chiếc bánh họ nhận ngon ít nhất bằng từng chiếc mà tất cả khách trước đó đã nhận. Khách đầu tiên luôn trả tiền vì chưa có khách nào trước đó.
Nếu phục vụ bánh theo thứ tự làm số người trả tiền lớn nhất, có bao nhiêu khách sẽ trả tiền?
Dữ liệu vào
Dòng đầu chứa số lượng bộ test \(\mathbf{T}\). Tiếp theo là \(\mathbf{T}\) bộ test, mỗi bộ được mô tả bằng hai dòng.
Dòng đầu của một bộ test chứa số nguyên \(\mathbf{N}\), là số bánh trong deque. Dòng thứ hai chứa \(\mathbf{N}\) số nguyên \(\mathbf{D}_1,\mathbf{D}_2,\ldots,\mathbf{D}_\mathbf{N}\), trong đó \(\mathbf{D}_i\) là độ ngon của chiếc bánh thứ \(i\) tính từ trái sang trong deque.
Dữ liệu ra
Với mỗi bộ test, in một dòng theo định dạng Case #x: y, trong đó \(x\) là số thứ tự bộ test (bắt đầu từ \(1\)), còn \(y\) là số khách trả tiền khi bạn phục vụ bánh theo một thứ tự tối đa hóa số lượng ấy.
Ràng buộc
- \(1\le\mathbf{T}\le100\).
- \(1\le\mathbf{D}_i\le10^6\) với mọi \(i\).
Phân nhóm
- Test Set 1 (phán quyết hiển thị): \(2\le\mathbf{N}\le20\).
- Test Set 2 (phán quyết hiển thị): \(2\le\mathbf{N}\le100\).
- Test Set 3 (phán quyết ẩn): \(2\le\mathbf{N}\le10^5\).
Đ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/25 | 28% |
| Test Set 2 | 8/25 | 32% |
| Test Set 3 | 10/25 | 40% |
Ví dụ
Ví dụ 1
Input
4
2
1 5
4
1 4 2 3
5
10 10 10 10 10
4
7 1 3 1000000
Output
Case #1: 2
Case #2: 3
Case #3: 5
Case #4: 2
Giải thích
Trong bộ test mẫu số 1, có hai thứ tự phục vụ. Nếu phục vụ chiếc có độ ngon \(5\) trước, chỉ chiếc ấy được trả tiền. Nếu phục vụ chiếc có độ ngon \(1\) trước, cả hai đều được trả tiền.
Bộ test mẫu số 2 chính là hình trong đề. Sau đây là mọi thứ tự phục vụ có thể, ghi theo độ ngon; các số được gạch chân là những chiếc mà khách phải trả tiền:
- \(\underline{1},\underline{4},2,3\)
- \(\underline{1},\underline{4},3,2\)
- \(\underline{1},\underline{3},\underline{4},2\)
- \(\underline{1},\underline{3},2,\underline{4}\)
- \(\underline{3},1,\underline{4},2\)
- \(\underline{3},1,2,\underline{4}\)
- \(\underline{3},2,1,\underline{4}\)
- \(\underline{3},2,\underline{4},1\)
Có những thứ tự khiến \(3\) chiếc bánh được trả tiền, nhưng không có thứ tự nào khiến cả \(4\) chiếc đều được trả tiền.
Trong bộ test mẫu số 3, mọi chiếc bánh đều được trả tiền bất kể thứ tự phục vụ.
Trong bộ test mẫu số 4, dù phục vụ chiếc nào trước, hai chiếc ở giữa cũng không bao giờ được trả tiền. Cách tốt nhất là phục vụ chiếc có độ ngon \(7\) trước chiếc có độ ngon \(1000000\).
Nguồn
Google Code Jam 2022, Vòng 1B, bài Pancake Deque.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Kỳ thi:
- Google Code Jam 2022 - Round 1B (24 Tháng tư, 2022)

Bình luận