Google Code Jam 2018 - Falling Balls

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

Một món đồ chơi gồm một lưới có ít nhất 2 cột và ít nhất 1 hàng. Mỗi ô chứa dốc \, dốc /, hoặc để trống. Cột ngoài cùng bên trái, cột ngoài cùng bên phải và hàng cuối đều phải trống. Để bi không mắc kẹt, một ô chứa dốc \ không bao giờ nằm ngay bên trái một ô chứa dốc /.

Khi thả một viên bi vào hàng trên cùng, nó di chuyển tất định:

  • Trong ô trống, bi đi xuống ô ngay dưới; nếu đang ở hàng cuối thì dừng.
  • Trong ô có dốc \, bi đi xuống dưới và sang phải một ô.
  • Trong ô có dốc /, bi đi xuống dưới và sang trái một ô.

Để quan sát toàn bộ cơ chế, người dùng thả đúng một viên vào mỗi cột. Các viên không ảnh hưởng nhau và một ô có thể chứa nhiều viên.

Bạn của bạn có món đồ chơi gồm \(C\) cột và số hàng chưa biết. Họ vừa thả mỗi cột trên cùng một viên, chờ tất cả dừng, rồi đếm số bi ở từng ô của hàng cuối và đưa kết quả cho bạn. Nhưng bạn nghi rằng họ có thể đã đếm sai. Hãy tạo một bố cục phù hợp với kết quả và dùng ít hàng nhất có thể, hoặc xác định rằng không có bố cục nào.

Ví dụ, nếu kết quả là 3 0 0 2 0 1, một lời giải có thể là:

.//\..
./\./.
......

Không bắt buộc dùng số dốc ít nhất, và cũng không bắt buộc mọi dốc đều tác động đến bi.

Dữ liệu vào

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

Mỗi bộ test bắt đầu bằng \(C\), số cột của đồ chơi. Dòng tiếp theo chứa \(C\) số nguyên \(B_i\); số thứ \(i\) là số bi mà bạn của bạn báo đã dừng ở ô thứ \(i\) từ trái sang trên hàng cuối.

Dữ liệu ra

Với mỗi bộ test, trước hết in Case #x: y, trong đó \(x\) là số thứ tự bộ test, bắt đầu từ 1, và \(y\)IMPOSSIBLE hoặc số hàng của bố cục.

Nếu \(y\) không phải IMPOSSIBLE, in tiếp \(y\) dòng theo thứ tự từ trên xuống dưới. Dùng . cho ô trống, \/ cho hai loại dốc. Bố cục phải tuân thủ mọi quy tắc trong đề.

Ràng buộc

  • \(1\le T\le100\).
  • \(0\le B_i\le C\) với mọi \(i\).
  • \(\sum_{i=1}^{C}B_i=C\).

Phân nhóm

  • Test Set 1 (Hiển thị): \(2\le C\le5\).
  • Test Set 2 (Ẩn): \(2\le C\le100\).

Đ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 5/17 29,41%
Test Set 2 12/17 70,59%

Ví dụ

Ví dụ 1

Input
3
4
1 1 1 1
3
0 2 1
6
3 0 0 2 0 1
Output
Case #1: 1
....
Case #2: IMPOSSIBLE
Case #3: 3
.//\..
./\./.
......
Giải thích

Test mẫu cuối không xuất hiện trong Test Set 1.

Với test mẫu 1, bố cục hợp lệ duy nhất là một hàng trống ....: phải có ít nhất một hàng, thêm hàng sẽ không còn tối thiểu, và hàng cuối không được chứa dốc.

Trong test mẫu 2, không có cách ngăn viên ngoài cùng bên trái rơi xuống đáy cột của nó nếu không thêm dốc, nhưng cột ngoài cùng không được có dốc.

Test mẫu 3 là ví dụ 3 0 0 2 0 1 ở trên. Bố cục không hợp lệ dưới đây vi phạm nhiều quy tắc: có nhiều hàng hơn cần thiết, có dốc ở cả ba vùng cấm là cột trái, cột phải và hàng cuối, đồng thời có dốc \ ngay bên trái dốc /.

\\..\/
../.\/
./../.
..../.

Nguồn

Google Code Jam 2018, Vòng 2, bài Falling Balls.

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: