Google Code Jam 2022 - Weightlifting

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

Bạn đang theo một giáo án tập cử tạ định sẵn. Giáo án gồm một chuỗi các bài tập mà bạn phải thực hiện theo đúng thứ tự. Mỗi bài tập yêu cầu đặt một bộ tạ cụ thể lên máy.

\(\mathbf{W}\) loại tạ khác nhau. Chẳng hạn, một bài tập có thể cần \(3\) đĩa tạ loại A và \(1\) đĩa tạ loại B, còn bài tập kế tiếp cần mỗi loại A, C và D đúng \(2\) đĩa.

Các đĩa tạ được đặt trên máy thành một chồng. Chính xác hơn, trong một thao tác, bạn có thể thêm một đĩa tạ thuộc loại bất kỳ lên đỉnh chồng, hoặc lấy đĩa tạ hiện nằm trên đỉnh chồng ra.

Bạn có thể chất các đĩa tạ cần cho từng bài tập lên máy theo thứ tự tùy ý. Vì vậy, nếu ở bài tập đầu trong ví dụ trên bạn đặt đĩa loại B ở đáy, bạn sẽ phải lấy hết các đĩa ra trước khi đặt tạ cho bài tập thứ hai. Ngược lại, nếu đặt đĩa loại B ở vị trí thứ ba tính từ đáy, bạn có thể giữ lại hai đĩa loại A ở đáy chồng để dùng trong bộ tạ của bài tập tiếp theo, qua đó tiết kiệm thời gian.

Biết số lượng tạ của từng loại mà mỗi bài tập cần, hãy tìm số thao tác ít nhất để hoàn thành tất cả. Bạn phải thực hiện các bài tập theo thứ tự đã cho. Ban đầu chồng tạ trên máy rỗng, và sau khi hoàn thành mọi bài tập bạn cũng phải để chồng tạ rỗng.

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ộ test bắt đầu bằng một dòng chứa hai số nguyên \(\mathbf{E}\)\(\mathbf{W}\): số bài tập và số loại tạ. Các loại tạ được đánh số từ \(1\) đến \(\mathbf{W}\).

Tiếp theo là \(\mathbf{E}\) dòng. Dòng thứ \(i\) chứa \(\mathbf{W}\) số nguyên \(\mathbf{X}_{i,1},\mathbf{X}_{i,2},\ldots,\mathbf{X}_{i,\mathbf{W}}\), nghĩa là bài tập thứ \(i\) cần chính xác \(\mathbf{X}_{i,j}\) đĩa tạ loại \(j\).

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ố thao tác trên chồng tạ của máy ít nhất cần dùng để hoàn thành toàn bộ các bài tập.

Ràng buộc

  • \(1 \le \mathbf{T} \le 100\).
  • \(1 \le \mathbf{X}_{i,1}+\mathbf{X}_{i,2}+\dots+\mathbf{X}_{i,\mathbf{W}}\) với mọi \(i\); tức mỗi bài tập cần ít nhất một đĩa tạ.

Phân nhóm

  • Test Set 1 (phán quyết hiển thị): \(1\le\mathbf{E}\le10\), \(1\le\mathbf{W}\le3\), và \(0\le\mathbf{X}_{i,j}\le3\) với mọi \(i,j\).
  • Test Set 2 (phán quyết ẩn): \(1\le\mathbf{E}\le100\), \(1\le\mathbf{W}\le100\), và \(0\le\mathbf{X}_{i,j}\le100\) với mọi \(i,j\).

Đ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/44 29,55%
Test Set 2 31/44 70,45%

Ví dụ

Ví dụ 1

Input
3
3 1
1
2
1
2 3
1 2 1
2 1 2
3 3
3 1 1
3 3 3
2 3 3
Output
Case #1: 4
Case #2: 12
Case #3: 20
Giải thích

Trong bộ test mẫu số 1 chỉ có một loại tạ. Bài tập thứ nhất cần \(1\) đĩa, bài thứ hai cần \(2\) đĩa và bài thứ ba cần \(1\) đĩa. Có thể hoàn thành trong \(4\) thao tác như sau:

  1. Thêm một đĩa tạ lên chồng rồi thực hiện bài tập thứ nhất.
  2. Thêm một đĩa tạ lên chồng rồi thực hiện bài tập thứ hai.
  3. Lấy một đĩa khỏi đỉnh chồng rồi thực hiện bài tập thứ ba.
  4. Lấy một đĩa khỏi đỉnh chồng; lúc này chồng trở thành rỗng.

Trong bộ test mẫu số 2, một cách hoàn thành các bài tập trong \(12\) thao tác là:

  1. Thêm một đĩa tạ loại \(2\).
  2. Thêm một đĩa tạ loại \(3\).
  3. Thêm một đĩa tạ loại \(1\).
  4. Thêm một đĩa tạ loại \(2\). Từ đáy lên đỉnh, chồng hiện gồm các loại \(2,3,1,2\). Thực hiện bài tập thứ nhất.
  5. Lấy đĩa loại \(2\) khỏi đỉnh chồng.
  6. Thêm một đĩa tạ loại \(3\).
  7. Thêm một đĩa tạ loại \(1\). Từ đáy lên đỉnh, chồng hiện gồm các loại \(2,3,1,3,1\). Thực hiện bài tập thứ hai.
  8. Lấy đĩa loại \(1\) khỏi đỉnh chồng.
  9. Lấy đĩa loại \(3\) khỏi đỉnh chồng.
  10. Lấy đĩa loại \(1\) khỏi đỉnh chồng.
  11. Lấy đĩa loại \(3\) khỏi đỉnh chồng.
  12. Lấy đĩa loại \(2\) khỏi đỉnh chồng; lúc này chồng trở thành rỗng.

Nguồn

Google Code Jam 2022, Vòng 1A, bài Weightlifting.

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: