AT_codefestival_2016_qualC_e 順列辞書
题目描述
有一天,高桥君捡到了一本包含所有 $1$ 到 $N$ 的 $N!$ 个排列的字典。这本字典共有 $N!$ 页,第 $i$ 页($1 \leq i \leq N!$)上记载着按字典序排列的第 $i$ 个排列。高桥君想用这本字典查找一个长度为 $N$ 的排列,但他忘记了排列中的部分数字。因此,他打算查找所有可能的排列在字典中的页码,并计算这些页码的总和。请你求出高桥君需要查找的所有页码之和对 $10^9+7$ 取模的结果。
排列的信息由 $P_1, P_2, ..., P_N$ 给出。当 $P_i=0$ 时,表示高桥君忘记了排列第 $i$ 个数,否则 $P_i$ 表示排列第 $i$ 个数就是 $P_i$。
输入格式
输入通过标准输入给出,格式如下:
> $N\ P_1\ P_2\ ...\ P_N$
输出格式
输出高桥君需要查找的所有页码之和对 $10^9+7$ 取模的结果。
说明/提示
## 限制条件
- $1 \leq N \leq 500000$
- $0 \leq P_i \leq N$
- 若 $i \neq j$ 且 $P_i \neq 0$ 且 $P_j \neq 0$,则 $P_i \neq P_j$
## 部分得分
- 若能正确解决 $1 \leq N \leq 3000$ 的数据集,可获得 $500$ 分。
## 样例解释 1
可能的排列为 $[1,2,3,4]$ 和 $[4,2,3,1]$。前者在第 $1$ 页,后者在第 $22$ 页,因此答案为 $23$。
## 样例解释 2
所有长度为 $3$ 的排列都是可能的,因此答案为 $1+2+3+4+5+6=21$。
## 样例解释 3
高桥君完全记得这个排列。
## 样例解释 4
字典只有 $1$ 页。
由 ChatGPT 4.1 翻译