QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 256 MB Total points: 100

#12914. 校验和

Statistics

我们周围充斥着各种长数字标识符:银行账号、ISBN 书号、商品条形码等等。这些标识符大多是由人工书写或输入的,为了避免错误,它们通常内置了某种错误检测机制。

错误检测通常以校验和(checksum)的形式实现。例如,ISBN-10 书号是由 10 位数字序列 $a_1, a_2, \dots, a_{10}$ 组成的,其校验和计算如下:

$$10 \times a_1 + 9 \times a_2 + 8 \times a_3 + \dots + 2 \times a_9 + 1 \times a_{10} \pmod{11}$$

校验和是一个介于 0 到 10 之间的数字,对于有效的书号,其校验和始终为 0。由于它是为错误检测而设计的,它具有以下重要特性:

  1. 如果在保持其他数字不变的情况下改变任意单个数字,校验和会发生变化。
  2. 如果在保持其余数字不变的情况下交换两个不同的相邻数字,校验和会发生变化。

然而,这种方式并不够“优美”,因为它有 11 种可能的取值,而单个数字只有 10 种可能的取值,因此显得有些冗余。

我们引入“优美校验和”的概念如下:假设我们的标识符是由 $n$ 个整数组成的序列,每个整数都在 $0$ 到 $m-1$(包含边界)之间:$a_1, a_2, \dots, a_n$。校验和算法由两个矩阵 $p_{ij}$ ($0 \le i, j \le m-1$) 和 $q_{ki}$ ($1 \le k \le n, 0 \le i \le m-1$) 定义,其中的值均在 $0$ 到 $m-1$(包含边界)之间。校验和计算如下:

  1. 令 $s_0 = 0$。
  2. 对于每个 $k$ 从 $1$ 到 $n$: (a) 令 $t_k = q_{k, a_k}$。 (b) 令 $s_k = p_{s_{k-1}, t_k}$。
  3. 返回 $s_n$ 的值作为校验和。

换句话说,矩阵 $q$ 定义了每个位置上数字的变换,而矩阵 $p$ 描述了如何组合变换后的数字。如果对于给定的 $n$ 和 $m$,校验和值对于任何序列 $a$ 都满足上述两个特性(即对改变单个数字敏感,且对交换两个不同的相邻数字 $a_k \neq a_{k+1}$ 敏感),则称这两个矩阵 $p$ 和 $q$ 定义了一个优美校验和。

例如,对于 $n=10, m=11$,定义 $p_{ij} = i+j \pmod{11}$,$q_{ki} = (11-k) \times i \pmod{11}$ 即为一个优美校验和。

你能为给定的 $n$ 和 $m$ 找出一个优美校验和吗?

输入格式

输入文件的唯一一行包含两个数字:$n$ 和 $m$,$2 \le n \le 100$,$2 \le m \le 9$。

输出格式

如果对于给定的 $n$ 和 $m$ 存在优美校验和,请在输出文件的第一行打印 Ja,否则打印 Nein

如果打印了 Ja,请在随后打印校验和的描述。接下来的 $m$ 行打印矩阵 $p$,每行包含 $m$ 个以空格分隔的整数:其中第 $i$ 行(从 0 开始计数)的第 $j$ 个(从 0 开始计数)值应为 $p_{ij}$。接下来的 $n$ 行打印矩阵 $q$,每行包含 $m$ 个以空格分隔的整数:其中第 $k$ 行(从 1 开始计数)的第 $i$ 个(从 0 开始计数)值应为 $q_{ki}$。

你打印的所有数字必须在 $0$ 到 $m-1$(包含边界)之间。如果存在多个可能的解,你可以输出其中任意一个。

样例

输入 1

4 3

输出 1

Ja
0 1 2
1 2 0
2 0 1
0 1 2
0 2 1
0 1 2
0 2 1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.