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