CF1644F Basis
题目描述
对于一个整数数组 $a$,我们定义 $|a|$ 为其元素个数。
我们定义两个函数:
- $F(a, k)$ 是一个函数,接收一个整数数组 $a$ 和一个正整数 $k$。该函数的结果是:将 $a$ 中的每个元素都替换为恰好 $k$ 个该元素的副本,得到一个新数组,然后取该新数组的前 $|a|$ 个元素。例如,$F([2, 2, 1, 3, 5, 6, 8], 2)$ 的计算过程如下:首先将每个元素替换为 $2$ 个副本,得到 $[2, 2, 2, 2, 1, 1, 3, 3, 5, 5, 6, 6, 8, 8]$。然后取前 $7$ 个元素,结果为 $[2, 2, 2, 2, 1, 1, 3]$。
- $G(a, x, y)$ 是一个函数,接收一个整数数组 $a$ 和两个不同的整数 $x$、$y$。该函数的结果是:将数组 $a$ 中所有等于 $x$ 的元素替换为 $y$,所有等于 $y$ 的元素替换为 $x$。例如,$G([1, 1, 2, 3, 5], 3, 1) = [3, 3, 2, 1, 5]$。
如果满足以下任一条件,则称数组 $a$ 是数组 $b$ 的父数组:
- 存在正整数 $k$ 使得 $F(a, k) = b$;
- 或存在两个不同的整数 $x$ 和 $y$ 使得 $G(a, x, y) = b$。
如果存在有限序列的数组 $c_0, c_1, \dots, c_m$($m \ge 0$),使得 $c_0$ 是 $a$,$c_m$ 是 $b$,且对于每个 $i \in [1, m]$,$c_{i-1}$ 是 $c_i$ 的父数组,则称数组 $a$ 是数组 $b$ 的祖先。
现在,给定两个整数 $n$ 和 $k$。你的目标是构造一个数组序列 $s_1, s_2, \dots, s_m$,使得:
- 每个数组 $s_i$ 恰好包含 $n$ 个元素,且所有元素均为 $1$ 到 $k$ 之间的整数;
- 对于每一个由 $n$ 个 $1$ 到 $k$ 之间的整数构成的数组 $a$,序列中至少存在一个数组 $s_i$,使得 $s_i$ 是 $a$ 的祖先。
请输出满足条件的最小数组序列长度。
输入格式
一行包含两个整数 $n$ 和 $k$($1 \le n, k \le 2 \times 10^5$)。
输出格式
输出一个整数,表示满足条件的最小数组序列长度。由于答案可能很大,请输出对 $998244353$ 取模后的结果。
说明/提示
我们来分析第一个样例。
第一个样例的一种可行答案是序列 $[[2, 1, 2], [1, 2, 2]]$。所有由 $3$ 个 $1$ 到 $2$ 之间的整数构成的数组,都在该序列中有一个祖先:
- 对于数组 $[1, 1, 1]$,祖先为 $[1, 2, 2]$:$F([1, 2, 2], 13) = [1, 1, 1]$;
- 对于数组 $[1, 1, 2]$,祖先为 $[1, 2, 2]$:$F([1, 2, 2], 2) = [1, 1, 2]$;
- 对于数组 $[1, 2, 1]$,祖先为 $[2, 1, 2]$:$G([2, 1, 2], 1, 2) = [1, 2, 1]$;
- 对于数组 $[1, 2, 2]$,祖先为 $[1, 2, 2]$;
- 对于数组 $[2, 1, 1]$,祖先为 $[1, 2, 2]$:$G([1, 2, 2], 1, 2) = [2, 1, 1]$;
- 对于数组 $[2, 1, 2]$,祖先为 $[2, 1, 2]$;
- 对于数组 $[2, 2, 1]$,祖先为 $[2, 1, 2]$:$F([2, 1, 2], 2) = [2, 2, 1]$;
- 对于数组 $[2, 2, 2]$,祖先为 $[1, 2, 2]$:$G(F([1, 2, 2], 4), 1, 2) = G([1, 1, 1], 1, 2) = [2, 2, 2]$。
由 ChatGPT 4.1 翻译