CF2157H.Keygen 3

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Trey Frey - Refresh

⠀

一个长度为 nn 的排列 ∗^{\ast} 被称为合法的,如果它同时满足以下两个性质:

  • 它是一个双调排列 †^{\dagger};
  • 恰好有 mm 个子集是一个循环节 ‡^{\ddagger}。

记满足上述条件的排列有 kk 个。你的任务是找到并输出 min⁡(k,2000)\min(k, 2000) 个这样的排列作为示例。

†^{\dagger} 一个排列 p1,p2,…,pnp_1, p_2, \ldots, p_n 称为双调的,如果存在一个下标 ii(1≤i≤n1 \leq i \leq n),使得

  • 对于 2≤j≤i2 \leq j \leq i,有 pj−1≤pjp_{j-1} \leq p_j;
  • 对于 i≤j≤n−1i \leq j \leq n-1,有 pj≥pj+1p_j \geq p_{j+1}。

‡^{\ddagger} 一个子集 C⊆{1,2,…,n}C \subseteq \{1, 2, \ldots, n\} 被称为循环节,如果它满足以下条件:

  • CC 非空;
  • 如果 x∈Cx \in C,则 px∈Cp_x \in C;
  • CC 是极小的,即不存在满足 C′⊂CC' \subset C 的循环节 C′C'。

∗^{\ast} 长度为 nn 的排列指的是 11 到 nn 的全排列,即由 nn 个两两不同的 11 到 nn 的整数按任意顺序组成的数组。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(22 在数组中出现了两次),[1,3,4][1,3,4] 也不是(n=3n=3 时出现了 44)。

输入格式

输入包含一行,包含两个整数 n,mn, m(1≤m≤n≤1001 \leq m \leq n \leq 100),分别表示排列的长度和要求循环节的个数。

输出格式

输出第一行为一个整数 rr,表示你将要输出的排列数量。注意 r=min⁡(k,2000)r=\min(k, 2000),kk 定义见题目说明。

接下来输出 rr 行,每行一个长度为 nn 的双调排列,其循环节数量为 mm。

输入输出样例

  • 输入#1

    6 3

    输出#1

    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

说明/提示

在样例中,有 99 个合法排列(即长度为 66 的双调排列且循环节为 33)。例如,[3,5,6,4,2,1][3, 5, 6, 4, 2, 1] 是双调的(在上述定义中,i=3i=3),它有 33 个循环节:{1,3,6}\{1, 3, 6\},{2,5}\{2, 5\},{4}\{4\}。因此你需要输出 r=min⁡(9,2000)=9r = \min(9, 2000) = 9 个这样的排列。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页