atcoder#AGC043D. [AGC043D] Merge Triplets
[AGC043D] Merge Triplets
题目描述
正整数 が与えられます。 の順列 であって、次の操作によって生成されうるものの数を求めてください。 ただし、答えは非常に大きくなることがあるので、素数 で割ったあまりを求めてください。
- 長さ の数列を 個用意する。この数列たちを とする。この 個の値には から がちょうど一度ずつ登場せねばならない。
- 空の数列 を用意する。以下の操作を 回繰り返す。
- 各数列 のうち、空でないものの先頭の要素を見て、そのうち最小の要素を とする。
- を から消去する。 の最後尾に を追加する。
输入格式
入力は以下の形式で標準入力から与えられる。
输出格式
条件を満たす順列の数を で割ったあまりを出力せよ。
题目大意
- 给定如下构造生成长度为 的排列 的方法:
- 先生成一个长度为 的排列 。然后将 , 分成一块。
- 有 个指针,初始指向每个块的第一个数。
- 每次选择所有指针指向的数中最小的数删除,然后放到 的末尾。之后指向被删除的数后移一个位置。若移出块了,则删除这个指针。
- 请你求出,一共能生成长度为 的排列共多少种。答案可能很大,请求出对 取模的结果。
- ,。
1 998244353
6
2 998244353
261
314 1000000007
182908545
提示
制約
- は素数
- 入力はすべて整数
Sample Explanation 1
すべての長さ の順列が条件を満たします。