#P436C. Dungeons and Candies
Dungeons and Candies
Dungeons and Candies
题面翻译
题目描述
给定 次文件,每次 个字符。
传输文件,有两种方式:
1.直接传输,耗费 个字符。
2.通过比较这个文件与前面某个文件的差别,耗费 个字符,其中 是常数。
文件顺序可任意交换。
求最小耗费字符数,并输出方案,有多种方案时任意输出一个。
输入格式
第一行,四个整数,。
接下来 行,每行 个字符,表示 个文件。
输出格式
第一行一个整数,最小花费。
接下来 行,每行两个整数:
第一个整数表示这次输出的文件是第几个(因为传输顺序可以任意调换,所以这个是有必要的)。
第二个整数如果是 ,表示用了方法1;否则表示"那个文件"是第几个,即用了方法2。
数据范围
字符只会是 '.' 或大小写字母。
题目描述
During the loading of the game "Dungeons and Candies" you are required to get descriptions of levels from the server. Each description is a map of an checkered rectangular field. Some cells of the field contain candies (each cell has at most one candy). An empty cell is denoted as "." on the map, but if a cell has a candy, it is denoted as a letter of the English alphabet. A level may contain identical candies, in this case the letters in the corresponding cells of the map will be the same.
When you transmit information via a network, you want to minimize traffic — the total size of the transferred data. The levels can be transmitted in any order. There are two ways to transmit the current level :
- You can transmit the whole level . Then you need to transmit bytes via the network.
- You can transmit the difference between level and some previously transmitted level (if it exists); this operation requires to transmit bytes, where is the number of cells of the field that are different for and , and is a constant. Note, that you should compare only the corresponding cells of levels and to calculate . You cannot transform the maps of levels, i.e. rotate or shift them relatively to each other.
Your task is to find a way to transfer all the levels and minimize the traffic.
输入格式
The first line contains four integers . Then follows the description of levels. Each level is described by lines, each line contains characters. Each character is either a letter of the English alphabet or a dot ("."). Please note that the case of the letters matters.
输出格式
In the first line print the required minimum number of transferred bytes.
Then print pairs of integers , describing the way to transfer levels. Pair , means that level needs to be transferred by way . If equals 0, that means that the level must be transferred using the first way, otherwise must be equal to the number of a previously transferred level. It means that you will transfer the difference between levels and to transfer level . Print the pairs in the order of transferring levels. The levels are numbered 1 through in the order they follow in the input.
If there are multiple optimal solutions, you can print any of them.
样例 #1
样例输入 #1
2 3 3 2
A.A
...
A.a
..C
X.Y
...
样例输出 #1
14
1 0
2 1
3 1
样例 #2
样例输入 #2
1 1 4 1
A
.
B
.
样例输出 #2
3
1 0
2 0
4 2
3 0
样例 #3
样例输入 #3
1 3 5 2
ABA
BBB
BBA
BAB
ABB
样例输出 #3
11
1 0
3 1
2 3
4 2
5 1
相关
在以下作业中: