Google Code Jam 2021 - Retiling
Xem PDFTác phẩm mới nhất của Cody-Jamal là một sàn bếp lát gạch có thể đổi sang nhiều hoa văn. Sàn là ma trận \(R\) hàng, \(C\) cột các viên gạch vuông. Mỗi viên có thể lật: một mặt màu magenta (M), mặt kia màu xanh (G).
Có hai thao tác:
- lật một viên, đổi màu nhìn thấy từ magenta sang xanh hoặc ngược lại;
- hoán đổi hai viên kề cạnh theo ngang hoặc dọc, không theo đường chéo, mà không lật chúng.
Xem sàn miễn phí, nhưng thao tác thì không: một lần lật tốn \(F\) xu, một lần đổi chỗ tốn \(S\) xu. Bạn biết trạng thái hiện tại và hoa văn đích. Cần ít nhất bao nhiêu xu?
Dữ liệu vào
Dòng đầu chứa số bộ dữ liệu \(T\). Dòng đầu mỗi bộ chứa \(R,C,F,S\). Tiếp theo là \(2R\) dòng, mỗi dòng \(C\) ký tự. \(R\) dòng đầu là trạng thái hiện tại; \(R\) dòng cuối là trạng thái mong muốn. Ký tự M nghĩa là mặt magenta đang hiện, G nghĩa là mặt xanh.
Dữ liệu ra
Với mỗi bộ dữ liệu, in Case #x: y, trong đó \(y\) là số xu ít nhất để biến trạng thái hiện tại thành trạng thái đích.
Ràng buộc
- \(1\le T\le100\); \(1\le R,C\le10\).
Phân nhóm
- Test Set 1 (Visible Verdict): \(F=S=1\).
- Test Set 2 (Hidden Verdict): \(1\le F,S\le10^6\).
Đ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 | 11/34 | 32,35% |
| Test Set 2 | 23/34 | 67,65% |
Ví dụ
Ví dụ 1
Input
2
2 4 1 1
MGMG
MMMG
GMGM
MMMM
3 3 1 1
MGG
GMG
MMM
MMM
MGM
MMG
Output
Case #1: 3
Case #2: 4
Giải thích
Mẫu #1 có \(5\) ô khác màu giữa đầu và đích. Mỗi thao tác đổi nhiều nhất \(2\) ô, nên cần ít nhất \(3\) thao tác. Một cách đạt \(3\) xu: đổi hai ô trái nhất hàng trên; đổi hai ô phải nhất hàng trên; lật ô góc phải dưới.
Mẫu #2 có \(6\) ô cần đổi. Muốn dùng \(3\) thao tác thì cả ba phải là đổi chỗ, nhưng không thể cho cả \(6\) ô mỗi ô tham gia đúng một đổi chỗ, nên cần ít nhất \(4\). Một cách: đổi hai ô trên cùng cột giữa; lật góc phải trên; đổi hai ô dưới cùng cột phải; lật ô giữa cột trái.
Ví dụ bổ sung — Test Set 2
??? "Giải thích"
Ví dụ này không được chạy trên lời giải nộp.
!!! question "Ví dụ 2"
???+ "Input"
```sample
1
1 5 1000 1
MGGGG
GGGMM
```
???+ success "Output"
```sample
Case #1: 1003
```
??? "Giải thích"
Lật rất đắt nên phải tránh tối đa. Tuy nhiên, đích có nhiều ô magenta hơn hiện tại nên cần ít nhất một lần lật, vì đổi chỗ không thay đổi số lượng. Cách tối ưu: đổi hai ô trái nhất; lật ô phải nhất; đổi ô thứ hai và ba từ trái; đổi ô thứ ba và tư từ trái.

Nguồn
Google Code Jam 2021, Vòng 2, bài Retiling.
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 2021 - Round 2 (15 Tháng năm, 2021)


Bình luận