Google Code Jam 2019 - New Elements: Part 2

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

Nguyên tố mới: Phần 2

Hai đoạn đầu tiên (không tính đoạn này) của bài toán này và bài "Nguyên tố mới: Phần 1" là giống hệt nhau. Ngoài ra, hai bài có thể được giải độc lập; bạn không cần đọc hoặc giải bài này để có thể đọc hoặc giải bài kia.

Muriel đang trên đường khám phá hai nguyên tố mới mà cô đặt tên là Codium và Jamarium. Cô vẫn chưa thể tách riêng chúng, nhưng muốn bắt đầu gián tiếp nghiên cứu một số tính chất quan trọng, chẳng hạn như khối lượng nguyên tử. Vì Muriel chỉ làm việc với một đồng vị duy nhất của Codium và một đồng vị duy nhất của Jamarium, khối lượng nguyên tử của chúng là các số nguyên dương.

Muriel đã tạo ra được \(N\) phân tử khác nhau. Mỗi phân tử chứa ít nhất một nguyên tử Codium, ít nhất một nguyên tử Jamarium và không chứa nguyên tố nào khác. Với mỗi phân tử, cô biết số nguyên tử của từng nguyên tố có trong đó. Khối lượng phân tử bằng tổng khối lượng nguyên tử của tất cả các nguyên tử mà phân tử chứa.

Bước đầu tiên, Muriel sắp xếp các phân tử theo thứ tự khối lượng phân tử tăng nghiêm ngặt. Bây giờ, cô muốn tìm các giá trị nguyên khả dĩ cho khối lượng nguyên tử của cả Codium lẫn Jamarium sao cho phù hợp với thứ tự này. Vì biết rằng có thể có nhiều cặp giá trị phù hợp, cô muốn chọn cặp làm khối lượng nguyên tử của Codium nhỏ nhất. Nếu có nhiều cặp cùng đạt khối lượng nguyên tử nhỏ nhất của Codium, cô muốn chọn cặp có khối lượng nguyên tử của Jamarium nhỏ nhất.

Dữ liệu vào

Dòng đầu tiên chứa số lượng bộ test \(T\). Tiếp theo là \(T\) bộ test. Dòng đầu tiên của mỗi bộ test chứa một số nguyên \(N\), là số lượng phân tử. Mỗi dòng trong \(N\) dòng tiếp theo mô tả một phân tử khác nhau bằng hai số nguyên \(C_i\)\(J_i\), lần lượt biểu thị số nguyên tử Codium và Jamarium trong phân tử thứ \(i\). Các phân tử được cho theo thứ tự khối lượng phân tử tăng nghiêm ngặt.

Dữ liệu ra

Với mỗi bộ test, in một dòng có dạng Case #x: y, trong đó x là số thứ tự của bộ test (bắt đầu từ 1), còn yIMPOSSIBLE (viết hoa) nếu không có cặp khối lượng nguyên tử nguyên nào làm cho khối lượng phân tử tăng nghiêm ngặt theo thứ tự đã cho. Nếu có, y phải là hai số nguyên c j, trong đó c là khối lượng nguyên tử của Codium và j là khối lượng nguyên tử của Jamarium, được chọn theo các quy tắc ở trên.

Ràng buộc

  • \(1 \le T \le 100\).
  • \(2 \le N \le 10\).
  • \((C_i, J_i) \ne (C_j, J_j)\) với mọi \(i \ne j\) (tất cả các phân tử đều khác nhau).

Phân nhóm

Test Set 1 (Công khai)

  • \(1 \le C_i \le 100\) với mọi \(i\).
  • \(1 \le J_i \le 100\) với mọi \(i\).

Test Set 2 (Ẩn)

  • \(1 \le C_i \le 10^9\) với mọi \(i\).
  • \(1 \le J_i \le 10^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 10/26 38,46%
Test Set 2 16/26 61,54%

Ví dụ

Ví dụ 1

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

Trong test mẫu số 1, hai phân tử cuối khác nhau ở chỗ phân tử này có thêm một nguyên tử của nguyên tố này, còn phân tử kia có thêm một nguyên tử của nguyên tố kia. Vì phân tử có thêm Codium nặng hơn về tổng thể, ta kết luận Codium phải nặng hơn Jamarium. Chọn khối lượng nguyên tử của Codium và Jamarium lần lượt là 2 và 1 thì khối lượng các phân tử là \(1 \times 2 + 1 \times 1 = 3\), \(1 \times 2 + 2 \times 1 = 4\)\(2 \times 2 + 1 \times 1 = 5\), đúng với thứ tự tăng nghiêm ngặt. Vì trong trường hợp này Codium nặng hơn Jamarium, 2 là khối lượng nguyên tử nhỏ nhất của Codium, và hiển nhiên 1 là khối lượng nguyên tử nhỏ nhất của Jamarium.

Gọi \(a\), \(b\), \(c\)\(d\) lần lượt là khối lượng của các phân tử trong test mẫu số 2, theo thứ tự khối lượng tăng dần. Từ thành phần nguyên tử của chúng, ta có \(d = 2 \times a\)\(c = 2 \times b\). Từ \(a < b\) suy ra \(d = 2 \times a < 2 \times b = c\), nghĩa là không có cặp giá trị khối lượng nguyên tử nào làm cho thứ tự đã cho tăng nghiêm ngặt.

Trong test mẫu số 3, lưu ý rằng các phân tử tình cờ được sắp theo thứ tự tăng nghiêm ngặt của tổng số nguyên tử. Do đó, gán khối lượng nguyên tử của cả hai nguyên tố bằng 1 sẽ làm khối lượng phân tử tăng nghiêm ngặt theo đúng thứ tự.

Nguồn

Google Code Jam 2019, Vòng 2, bài New Elements: Part 2.

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: