trang chủ / bài tập / dungcandy

Truyền màn chơi tiết kiệm

Đề bài

Mô tả

Khi tải dữ liệu của một trò chơi, bạn cần nhận mô tả của k màn chơi từ máy chủ. Mỗi mô tả là một bản đồ dạng lưới ô vuông kích thước n×m. Một số ô của bản đồ chứa kẹo (mỗi ô chứa nhiều nhất một viên). Ô trống được ký hiệu bởi dấu chấm ., còn ô chứa kẹo được ký hiệu bởi một chữ cái Latinh (chữ hoa và chữ thường được phân biệt). Các viên kẹo giống nhau ở các màn chơi khác nhau có thể được biểu diễn bằng cùng một chữ cái.

Khi truyền dữ liệu qua mạng, bạn muốn giảm tổng số byte phải truyền. Các màn chơi có thể được truyền theo thứ tự bất kỳ. Với mỗi màn chơi A, có hai cách truyền:

  1. Truyền toàn bộ màn chơi A — tốn n·m byte.
  2. Nếu đã có một màn chơi B được truyền trước đó, có thể truyền hiệu giữa AB — tốn dA,B·w byte, trong đó dA,B là số ô khác nhau giữa AB (so sánh từng cặp ô tương ứng — không xoay, không dịch chuyển bản đồ), còn w là một hằng số cho trước.

Hãy tìm cách truyền cả k màn chơi sao cho tổng số byte truyền là nhỏ nhất.

Dữ liệu vào

  • Dòng đầu chứa bốn số nguyên n, m, k, w.
  • Tiếp theo là mô tả của k màn chơi. Mỗi màn chơi gồm n dòng, mỗi dòng gồm m ký tự (chữ cái Latinh hoa/thường, hoặc dấu .). Các màn chơi được đánh số từ 1 đến k theo thứ tự xuất hiện trong dữ liệu vào.

Dữ liệu ra

  • Dòng đầu in tổng số byte nhỏ nhất phải truyền.
  • k dòng tiếp theo, mỗi dòng gồm hai số nguyên xiyi, mô tả thứ tự truyền: màn chơi thứ xi được truyền ở bước i theo cách yi. Nếu yi=0 thì truyền toàn bộ; ngược lại yi là số hiệu của một màn chơi đã được truyền trước đó và ta truyền hiệu giữa màn yi và màn xi.

Nếu có nhiều phương án tối ưu, in ra phương án bất kỳ.

Ràng buộc

  • 1n,m10
  • 1k,w1000

Ví dụ

Input Output Giải thích
2 3 3 2
A.A
...
A.a
..C
X.Y
...
14
1 0
2 1
3 1
Truyền màn 1 nguyên vẹn (6 byte). Truyền màn 2 dưới dạng hiệu với màn 1: hai bản đồ khác nhau ở 2 ô, tốn 2·2=4 byte. Truyền màn 3 dưới dạng hiệu với màn 1: khác nhau ở 2 ô, tốn 4 byte. Tổng cộng 6+4+4=14 byte.
1 1 4 1
A
.
B
.
3
1 0
2 0
3 0
4 2
4 màn, kích thước 1×1, w=1. Phương án trên truyền 3 màn nguyên vẹn (mỗi màn 1 byte) và một màn dưới dạng hiệu với chi phí 0, tổng cộng 3 byte. Các đáp án tối ưu khác cũng được chấp nhận.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0