Google Code Jam 2014 - Symmetric Trees

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

Cho một cây gồm \(N\) nút có màu, liệu có thể vẽ cây này trên mặt phẳng 2D sao cho nó có một trục đối xứng hay không?

Một cách hình thức, một cây được gọi là đối xứng trục nếu mỗi đỉnh có thể được gán một vị trí trên mặt phẳng 2D sao cho:

  • Tất cả các vị trí là phân biệt.
  • Nếu đỉnh \(v_i\) có màu \(C\) và tọa độ \((x_i, y_i)\), thì phải tồn tại một đỉnh \(v_i'\) có màu \(C\) tại tọa độ \((-x_i, y_i)\) -- Lưu ý nếu \(x_i = 0\), \(v_i\)\(v_i'\) là cùng một đỉnh.
  • Với mỗi cạnh \((v_i, v_j)\), phải tồn tại một cạnh \((v_i', v_j')\).
  • Nếu các cạnh được biểu diễn bằng các đoạn thẳng nối các đỉnh đầu mút, không có hai cạnh nào có điểm chung ngoại trừ tại các đầu mút của các cạnh kề nhau.

Dữ liệu vào

Dòng đầu tiên của đầu vào cho biết số lượng bộ test, \(T\). \(T\) bộ test tiếp theo.
Mỗi bộ test bắt đầu bằng một dòng chứa một số nguyên duy nhất \(N\), số lượng đỉnh trong cây.
\(N\) dòng tiếp theo, mỗi dòng chứa một chữ cái in hoa duy nhất. Dòng thứ \(i\) đại diện cho màu của nút thứ \(i\).
\(N-1\) dòng tiếp theo, mỗi dòng chứa hai số nguyên \(i\)\(j\) (\(1 \le i < j \le N\)). Điều này biểu thị rằng cây có một cạnh nối đỉnh thứ \(i\) và đỉnh thứ \(j\). Các cạnh sẽ tạo thành một cây liên thông.

Dữ liệu ra

Đối với mỗi bộ test, hãy xuất một dòng chứa "Case #x: y", trong đó x là số thứ tự bộ test (bắt đầu từ 1) và y là "SYMMETRIC" nếu cây đối xứng trục theo định nghĩa trên hoặc "NOT SYMMETRIC" nếu ngược lại.

Ràng buộc

  • \(1 \le T \le 100\).

Phân nhóm

  • Small dataset: \(2 \le N \le 12\).
  • Large dataset: \(2 \le N \le 10000\).

Đ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 7/25 28%
Test Set 2 18/25 72%

Ví dụ

Ví dụ 1

Input
3
4
R
G
B
B
1 2
2 3
2 4
4
R
G
B
Y
1 2
2 3
2 4
12
Y
B
Y
G
R
G
Y
Y
B
B
B
R
1 3
1 9
1 10
2 3
3 7
3 8
3 11
4 8
5 7
6 7
8 12
Output
Case #1: SYMMETRIC
Case #2: NOT SYMMETRIC
Case #3: SYMMETRIC
Note

Trường hợp đầu tiên có thể được vẽ như sau:

Không có cách sắp xếp nào cho trường hợp thứ hai có trục đối xứng:

Một cách vẽ trường hợp thứ ba với trục đối xứng như sau:

Nguồn

Google Code Jam 2014, Chung kết thế giới, bài Symmetric Trees.

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: