Google Code Jam 2017 - Beaming With Joy

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

Joy sắp đi nghỉ dài ngày, nên cô thuê kỹ thuật viên lắp một hệ thống an ninh dùng tia laser hồng ngoại. Họ đưa cho cô sơ đồ ngôi nhà dưới dạng lưới ô vuông đơn vị gồm \(R\) hàng và \(C\) cột. Mỗi ô chứa một trong các ký hiệu:

  • /: gương hai mặt chạy từ góc dưới trái đến góc trên phải của ô.
  • \\: gương hai mặt chạy từ góc trên trái đến góc dưới phải của ô.
  • -: máy phát bắn tia theo phương ngang vào ô ngay bên trái và bên phải, nếu có.
  • |: máy phát bắn tia theo phương dọc vào ô ngay phía trên và phía dưới, nếu có.
  • #: tường. Ngôi nhà không nhất thiết được bao kín bởi một viền tường — đó cũng là một lý do Joy cần hệ thống an ninh!
  • .: ô trống.

Tia đi thẳng qua các ô trống. Khi gặp gương, tia phản xạ 90 độ rồi tiếp tục. Một tia đi sang phải gặp gương / sẽ đổi hướng lên; các tia đi lên, sang trái, xuống gặp / lần lượt đổi sang phải, xuống, trái. Gương \\ hoạt động tương tự: tia đi sang phải, lên, trái, xuống lần lượt đổi sang xuống, trái, lên, phải. Tia dừng khi gặp tường hoặc ra ngoài lưới. Các tia có thể cắt nhau; nhưng nếu một tia chạm bất kỳ máy phát nào, kể cả máy đã phát ra nó, máy phát đó sẽ bị phá hủy.

Joy muốn mọi ô trống trong nhà có ít nhất một tia đi qua và không máy phát nào bị phá hủy — phá thiết bị chỉ tổ phí tiền! Các kỹ thuật viên đã lắp xong, nên cô chỉ có thể xoay một số máy phát hiện có 90 độ: có thể đổi - thành | hoặc ngược lại cho bất kỳ số máy nào, kể cả không máy nào.

Hãy tìm một cách đạt mục tiêu của Joy hoặc xác định rằng điều đó là không thể. Không cần cực tiểu hóa số máy phát bị xoay.

Dữ liệu vào

Dòng đầu tiên chứa số bộ test \(T\). Mỗi bộ test bắt đầu bằng hai số nguyên \(R,C\), số hàng và số cột của lưới. Tiếp theo là \(R\) dòng, mỗi dòng gồm \(C\) ký tự thuộc /, \\, -, |, #, . như mô tả.

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), còn yIMPOSSIBLE nếu Joy không thể đạt mục tiêu hoặc POSSIBLE nếu có thể. Nếu khả thi, in tiếp đúng \(R\) dòng gồm \(C\) ký tự của lưới đầu vào, trong đó có thể thay không hoặc nhiều ký tự - bằng | hay ngược lại. Nếu có nhiều đáp án, có thể in bất kỳ đáp án nào.

Ràng buộc

  • \(1\le T\le100\).
  • \(1\le C\le50\).
  • Mỗi ký tự lưới thuộc /, \\, -, |, #, ..
  • Tổng số máy phát (-|) từ 1 đến 100.
  • Có ít nhất một ô ..

Phân nhóm

Test Set 1 (Visible): \(1\le R\le5\) và lưới không có gương / hay \\.

Test Set 2 (Hidden): \(1\le R\le50\).

Đ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 12/29 41,38%
Test Set 2 17/29 58,62%

Ví dụ

Ví dụ 1

Input
5
1 3
-.-
3 4
#.##
#--#
####
2 2
-.
#|
4 3
.|.
-//
.-.
#\/
3 3
/|\
\\/
./#
Output
Case #1: IMPOSSIBLE
Case #2: POSSIBLE
#.##
#||#
####
Case #3: POSSIBLE
|.
#|
Case #4: POSSIBLE
.-.
|//
.|.
#\/
Case #5: IMPOSSIBLE
Giải thích

Hai test cuối không xuất hiện trong Test Set 1.

Ở test 1, nếu một máy phát được hướng để chiếu ô trống thì nhất thiết nó sẽ phá máy phát kia, nên đáp án là IMPOSSIBLE.

Ở test 2, máy phát bên trái phải được xoay để phủ ô trống. Máy phát bên phải cũng phải xoay để tránh phá máy bên trái.

Ở test 3, các máy phát hiện có đã phủ mọi ô trống mà không phá nhau, nên in nguyên lưới đầu vào cũng được. Tuy nhiên, lưới trong output mẫu cũng hợp lệ.

Ở test 4, một đáp án là xoay cả ba máy phát. Cấu hình dưới đây cũng hợp lệ vì không bắt buộc tia đi qua các ô chứa gương (ai lại đi trộm những tấm gương chéo khổng lồ chứ?):

.-.
|//
.-.
#\/

Ở test 5, máy phát sẽ tự phá chính nó bất kể Joy chọn hướng nào, nên đáp án là IMPOSSIBLE.

Nguồn

Google Code Jam 2017, Vòng 2, bài Beaming With Joy.

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: