Google Code Jam 2018 - Falling Balls
Xem PDFMộ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\) là 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, \ và / 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.
Kỳ thi:
- Google Code Jam 2018 - Round 2 (19 Tháng năm, 2018)
Bình luận