Google Code Jam 2016 - Senate Evacuation

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

Một đám cháy nhỏ bùng lên trong phòng thượng viện, và mọi người cần được sơ tán!

Trong phòng có một số thượng nghị sĩ, mỗi người thuộc một trong \(N\) đảng chính trị. Các đảng được đặt tên theo \(N\) chữ cái tiếng Anh viết hoa đầu tiên.

Cửa thoát hiểm đủ rộng cho tối đa hai thượng nghị sĩ, nên ở mỗi bước sơ tán, bạn có thể đưa một hoặc hai người ra khỏi phòng.

Quy tắc thượng viện cho phép những người còn trong phòng biểu quyết bất kỳ dự luật nào vào bất kỳ lúc nào, kể cả giữa quá trình sơ tán! Vì vậy, phải sơ tán sao cho không đảng nào từng có đa số tuyệt đối. Nói cách khác, sau bất kỳ bước sơ tán nào, không được có quá một nửa số thượng nghị sĩ còn trong phòng thuộc cùng một đảng.

Bạn có thể lập một kế hoạch sơ tán không? Thượng viện đang trông cậy vào bạn!

Dữ liệu vào

Dòng đầu tiên chứa số bộ test \(T\). Mỗi bộ test gồm hai dòng. Dòng đầu chứa số nguyên \(N\), là số đảng. Dòng thứ hai chứa \(N\) số nguyên \(P_1,P_2,\ldots,P_N\), trong đó \(P_i\) là số thượng nghị sĩ của đảng mang tên chữ cái thứ \(i\) trong bảng chữ cái.

Dữ liệu ra

Với mỗi bộ test, in một dòng Case #x: y, trong đó x là số thứ tự bộ test (bắt đầu từ 1), còn y là kế hoạch sơ tán. Kế hoạch là danh sách các chỉ dẫn cách nhau bằng dấu cách, theo đúng thứ tự thực hiện. Mỗi chỉ dẫn gồm một hoặc hai ký tự, biểu diễn đảng của những thượng nghị sĩ được đưa ra ở bước đó.

Đề bài bảo đảm luôn tồn tại ít nhất một kế hoạch hợp lệ. Nếu có nhiều kế hoạch, bạn có thể in bất kỳ kế hoạch nào.

Ràng buộc

  • \(1 \le T \le 50\).
  • Trước khi sơ tán, không đảng nào có đa số tuyệt đối.
  • \(1 \le P_i \le 1000\) với mọi \(i\).

Phân nhóm

  • Test Set 1 (Hiển thị): \(2 \le N \le 3\)\(\sum P_i \le 9\).
  • Test Set 2 (Ẩn): \(2 \le N \le 26\)\(\sum P_i \le 1000\).

Đ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 8/18 44,44%
Test Set 2 10/18 55,56%

Ví dụ

Ví dụ 1

Input
4
2
2 2
3
3 2 2
3
1 1 2
3
2 3 1
Output
Case #1: AB BA
Case #2: AA BC C BA
Case #3: C C AB
Case #4: BA BB CA
Giải thích

Đầu ra mẫu trình bày một bộ đáp án; có thể tồn tại các đáp án khác.

Ở bộ test số 1, mỗi đảng A và B có hai người. Mỗi lần đưa ra một người của mỗi đảng sẽ duy trì cân bằng hoàn hảo cho tới khi sơ tán xong.

Bộ test số 2 diễn ra như sau:

  • Ban đầu: 3 A, 2 B, 2 C.
  • Sơ tán AA: còn 1 A, 2 B, 2 C.
  • Sơ tán BC: còn 1 A, 1 B, 1 C.
  • Sơ tán C: còn 1 A, 1 B.
  • Sơ tán AB: hoàn tất.

Không thể bắt đầu bằng BC, vì khi đó còn 3 A, 1 B và 1 C; đảng A sẽ có đa số tuyệt đối (\(3/5=60\%\)).

Với bộ test số 3, CC AB cũng là đáp án hợp lệ; C C AB cũng hợp lệ dù cần ba bước thay vì hai.

Nguồn

Google Code Jam 2016, Vòng 1C, bài Senate Evacuation.

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: