#P15145. [SWERC 2025] Keygen 3
[SWERC 2025] Keygen 3
说明
Luke 刚刚发现了一款新的 5D 卡丁车视频游戏。然而,该软件并非免费:为了激活它,你需要提供一个许可证密钥。
Luke 发现,一个有效的许可证密钥必须是一个长度为 的排列,且满足以下两个条件:
- 它是双调的;
- 它具有 个循环。
记 为许可证密钥的数量(即满足上述条件的排列的数量)。Luke 是一位利他主义的黑客,因此他想为他的 2000 位朋友提供不同的许可证密钥。但是, 可能小于 2000。
请帮助 Luke,打印出 个不同的有效许可证密钥。
长度为 的一个排列是一个由 到 的 个不同整数以任意顺序组成的数组。例如, 是一个排列,但 不是排列( 在数组中出现两次), 也不是排列( 但数组中有 )。
一个排列 是双调的,如果存在一个下标 ()使得
- 对于 ,有 ;
- 对于 ,有 。
一个循环是指满足以下条件的子集 :
- 非空;
- 若 ,则 ;
- 是极小的,即不存在循环 使得 。
输入格式
输入只有一行,包含两个整数 ()—— 排列的长度和目标循环数。
输出格式
第一行输出一个整数 :你将打印的排列数量。注意 必须为题目中定义的 。
接下来输出 行。每行必须包含一个长度为 的、具有 个循环的双调排列。这些排列必须互不相同。
6 3
9
1 4 5 6 3 2
6 5 4 3 2 1
1 2 4 5 6 3
1 2 5 6 4 3
1 3 4 6 5 2
1 5 6 4 3 2
3 5 6 4 2 1
1 3 6 5 4 2
2 6 5 4 3 1
提示
样例解释
在此样例中,共有 个有效的许可证密钥(即长度为 、具有 个循环的双调排列)。例如, 是双调的(在上述定义中,),并且它有 个循环:、、。因此你需要打印 个这样的排列。
翻译由 DeepSeek 完成
京公网安备 11011102002149号