Google Code Jam 2022 - Wonderland Chase

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

Alice bị mắc kẹt trong mê cung Wonderland và đang bị Nữ hoàng Cơ cùng người truyền lệnh của bà truy đuổi! Mê cung gồm \(J\) giao lộ được đánh số từ \(1\) đến \(J\), nối với nhau bởi \(C\) hành lang hai chiều.

Alice và Nữ hoàng Cơ luân phiên di chuyển; cả hai luôn biết vị trí của người kia. Trong một lượt, mỗi người có thể đứng yên tại giao lộ hiện tại hoặc đi đến một giao lộ khác được nối với nó bằng hành lang.

Tuy nhiên, người truyền lệnh luôn công bố trước nước đi tiếp theo của Nữ hoàng. Điều đó có nghĩa là trước khi bất kỳ ai di chuyển, ông công bố nước đi đầu tiên của Nữ hoàng. Sau đó Alice đi trước. Mỗi khi Nữ hoàng đi, bà phải tuân theo thông báo trước đó, rồi quyết định nước đi kế tiếp để người truyền lệnh công bố. Alice nghe được mọi thông báo, nên luôn biết nước đi tiếp theo của Nữ hoàng trước khi chọn nước đi của mình.

Nếu Alice và Nữ hoàng ở cùng một giao lộ sau khi một trong hai người di chuyển, Alice bị bắt. Nếu không, cuộc truy đuổi tiếp tục. Sau tổng cộng \(10^9\) nước đi, một nửa của Alice và một nửa của Nữ hoàng, nếu họ vẫn không ở cùng giao lộ thì Nữ hoàng sẽ bỏ cuộc và Alice được an toàn.

Alice chọn nước đi tối ưu để trốn thoát. Nếu không thể thoát, cô chọn cách tối đa hóa tổng số nước đi trước khi bị bắt. Nữ hoàng chọn tối ưu để bắt Alice trong ít nước đi nhất có thể.

Cho sơ đồ mê cung và vị trí ban đầu của Nữ hoàng lẫn Alice, hãy xác định Alice có bị bắt hay không và, nếu có, sau bao nhiêu nước đi.

Dữ liệu vào

Dòng đầu tiên chứa số bộ test \(T\). Sau đó là \(T\) bộ test. Mỗi bộ test bắt đầu bằng một dòng chứa bốn số nguyên \(J,C,A,Q\): số giao lộ, số hành lang, giao lộ ban đầu của Alice và giao lộ ban đầu của Nữ hoàng.

Tiếp theo là \(C\) dòng. Dòng thứ \(i\) chứa hai số nguyên \(U_i,V_i\), cho biết hành lang thứ \(i\) nối hai chiều hai giao lộ \(U_i\)\(V_i\).

Dữ liệu ra

Với mỗi bộ test, in một dòng Case #x: y, trong đó \(x\) là số thứ tự bộ test (bắt đầu từ \(1\)). Nếu Alice có thể tránh bị bắt trong tổng cộng \(10^9\) nước đi, \(y\)SAFE. Nếu không, \(y\) là tổng số nước đi của cả Alice và Nữ hoàng cho đến khi Nữ hoàng bắt được Alice.

Ràng buộc

  • \(1\le T\le100\).
  • \(1\le A\le J\).
  • \(1\le Q\le J\).
  • \(A\ne Q\).
  • \(1\le U_i<V_i\le J\) với mọi \(i\).
  • \((U_i,V_i)\ne(U_j,V_j)\) với mọi \(i\ne j\).

Phân nhóm

  • Test Set 1 (phán quyết hiển thị): \(2\le J\le30\)\(1\le C\le60\).
  • Test Set 2 (phán quyết ẩn): \(2\le J\le10^5\)\(1\le C\le2\times10^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 8/30 26,67%
Test Set 2 22/30 73,33%

Ví dụ

Ví dụ 1

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

Ví dụ #1 chính là hình trong đề bài. Nước đi đầu tiên tối ưu của Alice là đến giao lộ \(4\).

Ví dụ #2 giống Ví dụ #1, nhưng Nữ hoàng bắt đầu ở giao lộ \(2\). Nữ hoàng có thể bắt Alice bằng cách đầu tiên thông báo sẽ đi đến giao lộ \(4\). Nếu Alice cũng đi đến giao lộ \(4\), cô bị bắt sau \(2\) nước đi. Alice có thể tránh bị bắt thêm \(2\) nước đi bằng cách đứng yên và chờ đến khi Nữ hoàng đi đến giao lộ \(5\), nơi Alice đang đứng.

Trong Ví dụ #3, dù làm gì Nữ hoàng cũng không thể đến chỗ Alice.

Trong Ví dụ #4, Nữ hoàng có thể bắt đầu bằng cách thông báo rằng bà sẽ đi đến giao lộ hiện tại của Alice. Alice phải đi trước lúc đó. Nếu Alice đi đến nơi Nữ hoàng đang đứng, cô bị bắt ngay; nếu Alice đứng yên, cô bị bắt khi Nữ hoàng di chuyển. Lựa chọn thứ hai tốt hơn vì cần tổng cộng \(2\) nước đi của Alice và Nữ hoàng thay vì \(1\).

Nguồn

Google Code Jam 2022, Chung kết thế giới, bài Wonderland Chase.

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: