背景
甲Davenport-Schinzel序列具有两个正整数参数d
和n
。我们将通过给定参数来表示所有Davenport-Schinzel序列的集合DS(d,n)
。
考虑自然数的所有序列1
到n
,包容性,满足:
- 序列中没有两个连续的数字相同。
- 没有长度大于的子序列(不一定是连续的)
d
,它在两个不同的数字之间交替。
让L
表示这样一个序列的最大长度(给定d
和n
)。然后,DS(d,n)
是所有具有length的此类序列的集合L
。
一些示例可能会有所帮助。让d = 4
,n = 3
。具有这些约束的最长序列可能具有L = 8
。因此,以下成员是DS(4,3)
:
[1, 2, 1, 3, 1, 3, 2, 3]
没有连续的相同数字,并且存在交替的length子序列4
,但没有更长的子序列:
1 2 1 2
1 2 1 2
1 3 1 3
1 3 1 3
2 3 2 3
2 3 2 3
1 3 1 3
1 3 1 3
下面的例子是不是在DS(4,3)
:
[1, 2, 2, 3, 1, 3, 2, 3] # Two consecutive 2's.
[1, 2, 1, 3, 1, 3, 2, 1] # Contains alternating subsequences of length 5.
[1, 2, 1, 3, 1, 3, 2] # Longer valid sequences for d = 4, n = 3 exist.
有关更多信息,请参见MathWorld和OEIS及其列出的参考。
挑战
给定两个正整数,n
和d
,在中生成任何Davenport-Schinzel序列DS(d,n)
。请注意,这些通常不是唯一的,因此请输出任何单个有效结果。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,然后从函数返回结果或将结果打印到STDOUT(或最接近的替代方案)。
您可以使用任何方便,明确的字符串或列表格式进行输出。
这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。
序列长度
由于序列不是唯一的,因此在此挑战中,单个示例没有太多用处。但是,对于任何输出而言,这两个一般的有效性问题都相当容易检查,因此主要问题是该序列是否具有正确的长度(或者存在更长的有效序列)。因此,这是给定和的已知1 的列表:L
d
n
\
d\n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
\-----------------------------------------------------------
1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 | 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
4 | 1 4 8 12 17 22 27 32 37 42 47 53 58 64 69 75 81 86 92 98
5 | 1 5 10 16 22 29 ...
6 | 1 6 14 23 34 ...
7 | 1 7 16 28 41 ...
8 | 1 8 20 35 53 ...
9 | 1 9 22 40 61 ...
10 | 1 10 26 47 73 ...
您不得将此表中的任何信息硬编码到提交中。
1该表来自1994年,因此此后可能会有更多的进步,但是我怀疑任何提交都将能够在合理的时间内处理该表中的更大条目。