QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 512 MB 總分: 100

#13603. 卡特兰数

统计

Andrew 喜欢卡特兰数(Catalan numbers)。同时,Andrew 也喜欢开玩笑。

他是一位经验丰富的命题人,为训练营准备了许多比赛。在每场比赛中,他都会准备一道题目,该题目以一个整数作为输入,输出一个整数,并且对于输入 $0, 1, 2, 3, 4, 5$ 的答案分别为 $1, 1, 2, 5, 14, 42$。然而,对于更大输入的答案与相应的卡特兰数并不一致。

Andrew 已经准备了如此多的比赛,以至于他缺乏具有这种性质的好题。因此,他决定将创建此类题目的过程自动化。他认为,在确定性有限状态自动机(DFA)中计算特定长度单词数量的问题是一个很好的备选题目池。Andrew 选择了 $k$ —— 作为输入为 $6$ 时所期望的答案,并希望找到一个确定性有限状态自动机,它分别接受长度为 $0, 1, 2, 3, 4, 5, 6$ 的单词数量为 $1, 1, 2, 5, 14, 42, k$,且该自动机的状态数最少。

回想一下,确定性有限状态自动机(DFA)是一个五元组 $(\Sigma, U, S, T, \phi)$,其中 $\Sigma$ 是被称为输入字符集的有限集,$U$ 是有限状态集,$S \in U$ 是初始状态,$T \subset U$ 是接受状态(终态)集,而 $\phi : U \times \Sigma \to U \cup \{\emptyset\}$ 是转移函数。

自动机的输入是 $\Sigma$ 上的字符串 $\alpha$。最初,自动机处于状态 $s$。每一步,自动机读取输入字符串的第一个字符 $c$,并将其状态更改为 $\phi(u, c)$,其中 $u$ 是当前状态。如果 $\phi(u, c) = \emptyset$,自动机立即拒绝 $\alpha$。然后,移除输入字符串的第一个字符,并重复该步骤。如果输入字符串变为空后,自动机处于接受状态,则它接受初始字符串 $\alpha$,否则拒绝它。

给你一个整数 $k$。请构造一个字符集大小至多为 $20$ 的确定性有限状态自动机,使其状态数最少,且该自动机接受的长度为 $0$ 到 $6$ 的单词数量由下表给出。接受的更长单词的数量可以是任意的。

长度 接受的单词数量
0 1
1 1
2 2
3 5
4 14
5 42
6 $k$

输入格式

输入文件包含多组测试数据。

每组测试数据在单独的一行中包含一个整数 $k$ ($120 \le k \le 140$)。

输入以一行 $n = 0$ 结束。

输出格式

对于每组测试数据,按以下格式输出所要求的确定性自动机。

第一行必须包含两个整数:$n$ —— 状态数,以及 $s$ —— 字符集大小 ($1 \le s \le 20$)。请注意,你必须最小化 $n$,但不需要最小化 $s$。

设状态编号为 $1$ 到 $n$,起始状态为 $1$,字符集的字符编号为 $1$ 到 $s$。

第二行必须包含 $n$ 个整数,指定相应的状态是否为接受状态:如果第 $i$ 个状态是接受状态,则第 $i$ 个整数必须为 $1$;如果第 $i$ 个状态不是接受状态,则为 $0$。

接下来的 $n$ 行,每行必须包含 $s$ 个整数:第 $i$ 行的第 $j$ 个整数必须是 $\phi(i, j)$ 的值 —— 即从第 $i$ 个状态通过第 $j$ 个字符转移到的状态,如果 $\phi(i, j) = \emptyset$,则为 $0$。

样例

输入样例 1

131
0

输出样例 1

3 4
1 0 0
1 2 0 0
1 2 2 3
2 3 3 0

说明

在给定的样例中,如果 $\Sigma = \{a, b, c, d\}$,则自动机接受的 $5$ 个长度为 $3$ 的单词为 "aaa"、"aba"、"baa"、"bba" 和 "bca"。

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.