Google Code Jam 2017 - Fashion Show

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

Bạn sắp tổ chức một buổi trình diễn ba phong cách thời trang trên sân khấu dạng lưới \(N\times N\). Mỗi ô hoặc trống (ký hiệu .), hoặc chứa một người mẫu loại +, x hay loại siêu thời thượng o. Mỗi + hoặc x cho 1 điểm phong cách, mỗi o cho 2 điểm, ô trống không cho điểm.

Để đạt hiệu quả nghệ thuật tối đa, cách đặt phải tuân theo:

  • Nếu hai người mẫu cùng hàng hoặc cùng cột, ít nhất một người phải là +.
  • Nếu hai người mẫu cùng một đường chéo, ít nhất một người phải là x.

Một cách chính xác, hai ô \((i_0,j_0)\)\((i_1,j_1)\) cùng hàng khi \(i_0=i_1\), cùng cột khi \(j_0=j_1\), và cùng đường chéo khi \(i_0+j_0=i_1+j_1\) hoặc \(i_0-j_0=i_1-j_1\).

Ví dụ, lưới sau không hợp lệ:

...
x+o
.+.

Ở hàng giữa, cặp xo không có ai là +. Trên đường chéo từ + ở hàng cuối tới o ở hàng giữa cũng có hai người mà không ai là x.

Ngược lại, lưới sau hợp lệ vì không hàng, cột hay đường chéo nào vi phạm:

+.x
+x+
o..

Cố vấn đã đặt trước \(M\) người mẫu theo đúng quy tắc. Bạn có thể thêm tùy ý (kể cả không thêm) bất kỳ loại nào. Không được bỏ người mẫu có sẵn, nhưng có thể nâng cấp bao nhiêu + hoặc x thành o tùy ý, miễn vẫn hợp lệ. Hãy tìm một cách đặt/thay thế hợp lệ có tổng điểm phong cách lớn nhất.

Dữ liệu vào

Dòng đầu chứa số test \(T\). Mỗi test bắt đầu bằng \(N,M\), sau đó là \(M\) dòng; dòng thứ \(i\) chứa loại +, x hoặc o và hai số \(R_i,C_i\). Hàng được đánh số từ 1 đến \(N\) từ trên xuống, cột từ 1 đến \(N\) từ trái sang phải.

Dữ liệu ra

Với mỗi test, trước tiên in Case #x: y z, trong đó x là số thứ tự test bắt đầu từ 1, y là tổng điểm của cách bố trí và z là tổng số người mẫu đã thêm hoặc thay thế. Sau đó in đúng \(z\) dòng theo định dạng input, ghi loại cuối cùng và vị trí của từng người mẫu được thêm/thay; các dòng có thể theo thứ tự bất kỳ.

Nếu có nhiều đáp án hợp lệ, có thể in bất kỳ đáp án nào.

Ràng buộc

  • \(1\le T\le100\).
  • \(1\le N\le100\).
  • \(1\le C_i\le N\).
  • \(0\le M\le N^2\).
  • Không có hai người mẫu đặt sẵn trong cùng ô.
  • Cách đặt ban đầu được bảo đảm hợp lệ.

Phân nhóm

  • Test Set 1 (Visible): \(R_i=1\) với mọi \(i\); mọi người mẫu đặt sẵn đều ở hàng trên cùng, nhưng vẫn có thể thêm/thay trong hàng này hoặc thêm ở hàng khác.
  • Test Set 2 (Hidden): \(1\le R_i\le N\); không có hạn chế thêm về hàng.

Đ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 10/35 28,57%
Test Set 2 25/35 71,43%

Ví dụ

Ví dụ 1

Input
3
2 0
1 1
o 1 1
3 4

+ 2 3
+ 2 1
x 3 1
+ 2 2
Output
Case #1: 4 3
o 2 2
+ 2 1
x 1 1
Case #2: 2 0
Case #3: 6 2
o 2 3
x 1 2
Giải thích

Output mẫu chỉ là một tập đáp án; có thể có các đáp án khác. Test cuối sẽ không xuất hiện trong Test Set 1.

Test 1 là lưới \(2\times2\) ban đầu trống; output tương ứng với:

x.
+o

Trong test 2, ô duy nhất đã chứa o; không thể thêm người mới hay thay o.

Trước khi đặt thêm, test 3 là:

...
+++
x..

Output tương ứng với:

.x.
++o
x..

Nguồn

Google Code Jam 2017, Vòng loại, bài Fashion Show.

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: