Google Code Jam 2018 - Transmutation

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 là nhà giả kim tài giỏi nhất của một đất nước coi những kim loại như vàng, bạch kim và bạc là tẻ nhạt, nhưng lại đặc biệt quý trọng chì. Thế giới biết đến \(M\) kim loại; chì là kim loại số 1 trong bảng tuần hoàn của bạn. Nhà lãnh đạo yêu cầu bạn dùng số kim loại trong kho bạc để tạo ra nhiều chì nhất có thể.

Với mỗi kim loại, kể cả chì, bạn biết đúng một công thức tạo một gram kim loại đó bằng cách phá hủy một gram của mỗi loại trong hai kim loại nguyên liệu. Nếu thắc mắc về định luật bảo toàn khối lượng, gram còn lại bị mất vào các phế phẩm vô dụng. Công thức không hoạt động với phần lẻ của một gram. Tuy nhiên, bạn có thể dùng mỗi công thức bao nhiêu lần tùy ý, hoặc không dùng lần nào, miễn là mỗi lần đều có đủ nguyên liệu.

Nếu lựa chọn tối ưu, tổng lượng chì lớn nhất mà bạn có thể thu được là bao nhiêu? Lưu ý rằng sau khi hoàn tất, một số kim loại khác chì có thể vẫn còn dư.

Dữ liệu vào

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

Mỗi bộ test bắt đầu bằng một dòng chứa số nguyên \(M\), số kim loại được biết đến. Tiếp theo là \(M\) dòng, mỗi dòng chứa hai số nguyên \(R_{i1}\)\(R_{i2}\); dòng thứ \(i\) cho biết có thể tạo một gram kim loại \(i\) bằng cách phá hủy một gram kim loại \(R_{i1}\) và một gram kim loại \(R_{i2}\). Cuối cùng là một dòng chứa \(M\) số nguyên \(G_1,G_2,\ldots,G_M\), trong đó \(G_i\) là số gram kim loại \(i\) trong kho bạc. Chì là kim loại 1.

Dữ liệu ra

Với mỗi bộ test, in Case #x: y, trong đó \(x\) là số thứ tự bộ test, bắt đầu từ 1, và \(y\) là lượng chì lớn nhất, tính bằng gram, mà bạn có thể thu được.

Ràng buộc

  • \(1\le T\le100\).
  • \(1\le R_{i1}<R_{i2}\le M\) với mọi \(i\).

Phân nhóm

  • Test Set 1 (Hiển thị): \(2\le M\le8\); \(0\le G_i\le8\) với mọi \(i\).
  • Test Set 2 (Ẩn): \(2\le M\le100\); \(0\le G_i\le100\) với mọi \(i\).
  • Test Set 3 (Ẩn): \(2\le M\le100\); \(0\le G_i\le10^9\) với mọi \(i\).

Đ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 15/45 33,33%
Test Set 2 18/45 40%
Test Set 3 12/45 26,67%

Ví dụ

Ví dụ 1

Input
3
3
2 3
1 3
1 2
5 2 3
5
3 4
3 4
4 5
3 5
1 3
0 8 6 2 4
4
3 4
2 3
2 3
2 3
0 1 1 0
Output
Case #1: 7
Case #2: 4
Case #3: 0
Giải thích

Trong test mẫu 1, chiến lược tối ưu dùng 2 gram kim loại 2 và 2 gram kim loại 3 để tạo thêm 2 gram chì, cho tổng cộng 7 gram chì.

Trong test mẫu 2, trước hết dùng 2 gram kim loại 3 và 2 gram kim loại 5 để tạo 2 gram kim loại 4; sau đó dùng 4 gram kim loại 3 và 4 gram kim loại 4 để tạo 4 gram chì. Hai công thức có thể có cùng cặp nguyên liệu, chỉ khác kỹ thuật giả kim. Không phải kim loại nào cũng nhất thiết là nguyên liệu của công thức khác; ở đây kim loại 2 không bao giờ là nguyên liệu.

Test mẫu 3 cho thấy một kim loại có thể được dùng để tạo ra chính nó. Dù luật giả kim đôi khi kỳ quặc, trường hợp này vẫn không thể tạo ra chì. Vì công thức chỉ hoạt động với từng gram nguyên, ta không thể dùng 0,5 gram của kim loại 2 và 3 để tạo 0,5 gram kim loại 4, rồi dùng 0,5 gram kim loại 3 và 4 để tạo 0,5 gram chì.

Nguồn

Google Code Jam 2018, Vòng 1B, bài Transmutation.

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: