3809: 【回溯】2024E-加密算法

金币值:1 时间限制:2.000 s 内存限制:128 M
正确:178 提交:462 正确率:38.53% 命题人:

题目描述

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下

1. 明文为一段数字串由0-9组成 

2. 密码本为数字0-9组成的二维数组 

3. 需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。 

4. 每一位明文对应密文即为密码本中找到的单元格所在的行和列序号(序号从0开始)组成的两个数字。如明文第i位Data[i]对应密码本单元格为Book[X][Y],则明文第i位对应的密文为X Y,X和Y之间用空格隔开。

如果有多条密文,返回字符序最小的密文。如果密码本无法匹配,返回"error". 请你设计这个加密程序。



示例 1:
密码本:
{0,0,2},
{1,3,4},
{6,6,4}
明文"3",密文"1 1"

示例 2:
密码本:
{0,0,2},
{1,3,4},
{6,6,4}
明文"0 3",密文"0 1 1 1"

示例 3:
密码本:
{0,0,2,4}
{1,3,4,6}
{3,4,1,5}
{6,6,6,5}
明文"0 0 2 4",密文"0 0 0 1 0 2 0 3""0 0 0 1 0 2 1 2",返回字典序小的"0 0 0 1 0 2 0 3"


输入格式

第一行输入1个正整数N,代表明文的长度(1 <= N <= 9) 

第二行输入N个明文数字组成的序列Data[i](整数,0 <= Data[i] <= 9) 

第三行输入1个正整数M,(1 <= M <= 9) 

接下来输入一个M*M的矩阵代表密码本Book[i][i],(整数,0 <= Book[i][i] <= 9)

输出格式

如明文 第i位Data[i]对应密码本单元格为Book[i][j],则明文第i位对应的密文为X Y,X和Y之间用空格隔开。如果有多条密文,返回字符序最小的密文。如果密码本无法匹配,返回"error"。

输入样例    复制

4
0 0 2 4
4
0 0 2 4
1 3 4 6
3 4 1 5
6 6 6 5

输出样例    复制

0 0 0 1 0 2 0 3