Google Code Jam 2014 - Part Elf

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

Vida nói rằng cô ấy mang dòng máu Elf: ít nhất một trong những tổ tiên của cô ấy là Elf. Nhưng cô ấy không biết đó là cha mẹ (1 thế hệ trước), ông bà (2 thế hệ trước), hay một người nào đó từ nhiều thế hệ trước nữa. Hãy giúp cô ấy!

Quy tắc di truyền dòng máu Elf hoạt động như sau: Nếu một người cha/mẹ là Elf tỉ lệ A/B, và người còn lại là Elf tỉ lệ C/D, thì con của họ sẽ là Elf tỉ lệ (A/B + C/D) / 2. Ví dụ, nếu một người là Elf 0/1 (người thuần chủng) và một người là Elf 1/2 có con, đứa trẻ đó sẽ là Elf 1/4.

Vida chắc chắn về một điều: 40 thế hệ trước, cô ấy có \(2^{40}\) tổ tiên khác nhau, và mỗi người trong số họ hoặc là Elf 1/1 hoặc là Elf 0/1.

Vida nói cô ấy là Elf tỉ lệ P/Q. Hãy cho cô ấy biết số thế hệ tối thiểu trước đây có thể có một người là Elf 1/1 trong gia đình cô ấy. Nếu Vida không thể là Elf tỉ lệ P/Q, hãy thông báo rằng cô ấy đã nhầm!

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 dòng tiếp theo, mỗi dòng chứa một phân số có dạng P/Q, trong đó PQ là các số nguyên.

Dữ liệu ra

Với mỗi bộ test, xuất một dòng chứa "Case #x: y", trong đó x là số thứ tự bộ test (bắt đầu từ 1) và y là số thế hệ tối thiểu trước đây có thể có một Elf 1/1 nếu cô ấy là Elf tỉ lệ P/Q. Nếu không thể, y phải là chuỗi "impossible".

Ràng buộc

  • \(1 \le \mathbf{T} \le 100\).

Phân nhóm

  • Small dataset:

    • \(1 \le \mathbf{P} < \mathbf{Q} \le 1000\).
    • PQ không có ước chung (phân số tối giản).
    • Large dataset:

    • \(1 \le \mathbf{P} < \mathbf{Q} \le 10^{12}\).

    • PQ có thể có ước chung (phân số không nhất thiết tối giản).

Ghi chú chung

Đúng vậy, Vida có rất nhiều tổ tiên. Nếu đó là phần phi thực tế nhất đối với bạn, hãy đọc lại phần về Elf.

Đ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 8/20 40%
Test Set 2 12/20 60%

Ví dụ

Ví dụ 1

Input
5
1/2
3/4
1/4
2/23
123/31488
Output
Case #1: 1
Case #2: 1
Case #3: 2
Case #4: impossible
Case #5: 8
Note

Lưu ý: Bộ test thứ năm không nằm trong giới hạn của Small dataset.

Giải thích ví dụ

  • Trong ví dụ đầu tiên, Vida có thể có một người cha/mẹ là Elf 1/1 và người còn lại là Elf 0/1. Điều đó có nghĩa là cô ấy có thể có Elf 1/1 từ 1 thế hệ trước, vì vậy đáp án là 1.
  • Trong ví dụ thứ hai, Vida có thể có một người cha/mẹ là Elf 1/1 và người còn lại là Elf 1/2. Đáp án là 1.
  • Trong ví dụ thứ ba, Vida có thể có cha mẹ là Elf 0/1 và Elf 1/2. Người cha/mẹ Elf 1/2 có thể có cha mẹ là Elf 1/1 và Elf 0/1. Điều này nghĩa là Elf 1/1 có thể xuất hiện từ 2 thế hệ trước, đáp án là 2.
  • Trong ví dụ thứ tư, không thể có tỉ lệ chính xác 2/23 nếu tất cả tổ tiên 40 thế hệ trước đều là 0/1 hoặc 1/1.

Nguồn

Google Code Jam 2014, Vòng 1C, bài Part Elf.

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: