CF1391C.Cyclic Permutations
普及/提高-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
A permutation of length n is an array consisting of n distinct integers from 1 to n in arbitrary order. For example, [2,3,1,5,4] is a permutation, but [1,2,2] is not a permutation (2 appears twice in the array) and [1,3,4] is also not a permutation (n=3 but there is 4 in the array).
Consider a permutation p of length n, we build a graph of size n using it as follows:
- For every 1≤i≤n, find the largest j such that 1≤j<i and pj>pi, and add an undirected edge between node i and node j
- For every 1≤i≤n, find the smallest j such that i<j≤n and pj>pi, and add an undirected edge between node i and node j
In cases where no such j exists, we make no edges. Also, note that we make edges between the corresponding indices, not the values at those indices.
For clarity, consider as an example n=4, and p=[3,1,4,2]; here, the edges of the graph are (1,3),(2,1),(2,3),(4,3).
A permutation p is cyclic if the graph built using p has at least one simple cycle.
Given n, find the number of cyclic permutations of length n. Since the number may be very large, output it modulo 109+7.
Please refer to the Notes section for the formal definition of a simple cycle
长度为 n 的排列是指由 1 到 n 中互不相同的 n 个整数按任意顺序组成的数组。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是排列(数字 2 在数组中出现了两次),[1,3,4] 也不是排列(此时 n=3,但数组中出现了 4)。
考虑一个长度为 n 的排列 p,我们据此构造一个含 n 个节点的图,规则如下:
- 对每个 1≤i≤n,找出最大的 j 满足 1≤j<i 且 pj>pi,并在节点 i 与节点 j 之间添加一条无向边;
- 对每个 1≤i≤n,找出最小的 j 满足 i<j≤n 且 pj>pi,并在节点 i 与节点 j 之间添加一条无向边。
若不存在满足条件的 j,则不添加边。注意:所添加的边连接的是下标(即位置)对应的节点,而非这些位置上的数值。
为便于理解,以 n=4、p=[3,1,4,2] 为例,该图的边集为 (1,3),(2,1),(2,3),(4,3)。
若用排列 p 构造出的图中至少包含一个简单环,则称该排列 p 是环状的(cyclic)。
给定 n,求长度为 n 的环状排列的个数。由于答案可能非常大,请输出其对 109+7 取模的结果。
有关简单环的严格定义,请参见“注释”(Notes)部分。
输入格式
The first and only line contains a single integer n (3≤n≤106).
第一行且唯一一行包含一个整数 n(3≤n≤106)。
输出格式
Output a single integer 0≤x<109+7, the number of cyclic permutations of length n modulo 109+7.
输出一个整数 0≤x<109+7,表示长度为 n 的循环排列的个数对 109+7 取模的结果。
输入输出样例
输入#1
4
输出#1
16
输入#2
583291
输出#2
135712853
说明/提示
There are 16 cyclic permutations for n=4. [4,2,1,3] is one such permutation, having a cycle of length four: 4→3→2→1→4.
Nodes v1, v2, …, vk form a simple cycle if the following conditions hold:
- k≥3.
- vi=vj for any pair of indices i and j. (1≤i<j≤k)
- vi and vi+1 share an edge for all i (1≤i<k), and v1 and vk share an edge.
当 n=4 时,共有 16 个循环排列。[4,2,1,3] 就是其中之一,它包含一个长度为四的环:4→3→2→1→4。
节点 v1、v2、…、vk 构成一个简单环,当且仅当满足以下条件:
- k≥3;
- 对任意下标对 i 和 j(其中 1≤i<j≤k),均有 vi=vj;
- 对所有 i(其中 1≤i<k),vi 与 vi+1 相邻(即二者之间存在一条边),且 v1 与 vk 相邻。
输入解题思路,AI测评打分。不知道怎么写?