IOI 2000 - Building with Blocks

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: 2100 (p) Thời gian: 6.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Một khối lập phương đơn vị có kích thước \(1\times1\times1\) và các đỉnh có tọa độ nguyên \(x\), \(y\), \(z\). Hai khối lập phương đơn vị được xem là nối với nhau nếu chung một mặt. Một vật thể đặc ba chiều, gọi tắt là vật thể, là một tập không rỗng, liên thông gồm các khối lập phương đơn vị. Thể tích của vật thể là số khối lập phương đơn vị mà nó chứa.

Một khối ghép là một vật thể có thể tích không quá \(4\). Hai khối ghép cùng loại nếu có thể biến khối này thành khối kia bằng các phép tịnh tiến và phép quay, không dùng phép đối xứng gương. Có đúng \(12\) loại khối ghép. Màu sắc trong các hình chỉ giúp làm rõ cấu trúc, không có ý nghĩa nào khác.

Một tập \(D\) các khối ghép là một cách phân rã vật thể \(S\) nếu hợp của các khối trong \(D\) bằng \(S\) và không có hai khối khác nhau nào trong \(D\) chứa chung một khối lập phương đơn vị. Cho mô tả các loại khối ghép và một vật thể \(S\), hãy tìm một cách phân rã \(S\) dùng ít khối ghép nhất. Chỉ cần báo số hiệu loại của từng khối ghép được sử dụng; một loại xuất hiện bao nhiêu lần trong cách phân rã thì phải được báo bấy nhiêu lần.

Dữ liệu vào

Một khối lập phương đơn vị được mô tả bằng ba số nguyên \(x\), \(y\), \(z\): tọa độ của đỉnh có tổng \(x+y+z\) nhỏ nhất.

Bảng loại khối trong tệp đính kèm TYPES.IN là dữ liệu công khai, cố định. Bạn phải đưa các giá trị của bảng này vào chương trình; không mở tệp TYPES.IN khi chấm bài, vì tệp này không được cung cấp trong thư mục chạy. Dữ liệu vào chuẩn chỉ chứa mô tả vật thể cần phân rã, không chứa bảng loại khối.

Tệp TYPES.IN mô tả \(12\) loại trong Hình 2, có nội dung cố định cho mọi lần chạy. Các loại được liệt kê theo thứ tự số hiệu tăng dần. Mỗi loại được mô tả bằng một nhóm dòng liên tiếp: dòng đầu chứa số hiệu \(I\), với \(1 \le I \le 12\); dòng thứ hai chứa thể tích \(V\), với \(1 \le V \le 4\); tiếp theo là \(V\) dòng tọa độ của các khối lập phương đơn vị, với \(1 \le x,y,z \le 4\). Nội dung đầy đủ của TYPES.IN là:

1
1
1 1 1
2
2
1 1 1
1 2 1
3
3
1 1 1
1 2 1
1 3 1
4
3
1 1 1
1 2 1
1 1 2
5
4
1 1 1
1 2 1
1 3 1
1 4 1
6
4
1 1 1
1 2 1
1 1 2
1 2 2
7
4
1 1 1
1 2 1
1 1 2
1 1 3
8
4
1 1 1
1 2 1
1 3 1
1 2 2
9
4
1 2 1
1 3 1
1 1 2
1 2 2
10
4
2 1 1
1 2 1
2 2 1
2 1 2
11
4
1 1 1
1 2 1
2 2 1
1 1 2
12
4
2 2 1
2 1 2
1 2 2
2 2 2

Dữ liệu vào chuẩn mô tả vật thể cần phân rã: dòng đầu chứa thể tích \(V\), với \(1 \le V \le 50\); tiếp theo là \(V\) dòng, mỗi dòng chứa ba số nguyên \(x\), \(y\), \(z\) xác định một khối lập phương đơn vị của vật thể, với \(1 \le x,y,z \le 7\).

Dữ liệu ra

Dòng đầu chứa số nguyên \(M\), số khối ghép ít nhất để phân rã vật thể. Dòng thứ hai chứa \(M\) số hiệu loại của các khối ghép trong một cách phân rã như vậy. Không cần báo vị trí của chúng. Có thể có nhiều đáp án; chỉ cần in một đáp án và có thể liệt kê các số hiệu theo thứ tự bất kỳ.

Ví dụ

Ví dụ 1

Input
18
2 1 1
4 1 1
2 3 1
4 3 1
2 1 2
3 1 2
4 1 2
1 2 2
2 2 2
3 2 2
4 2 2
2 3 2
3 3 2
4 3 2
4 2 3
4 2 4
4 2 5
5 2 5
Output
5
7 10 2 10 12
Note

Vật thể trong dữ liệu vào là hình con ngựa ở Hình 1. Dòng thứ hai của kết quả cũng có thể là một trong các dòng sau:

2 7 10 11 12
2 7 11 11 12
4 4 7 10 11
4 4 9 10 11

Tệp

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: