犀牛坦克¶
- 参考时间限制:0.5 秒(参考环境:评测环境与性能;仅供预估)
- 实际时间限制:标准程序在目标评测环境中处理最慢正式测试文件的基准时间的 2 倍,按 0.5 秒的倍数向上取整;若平台仅支持更粗的粒度,再向上取整到平台可设置值。
- 内存限制:512 MB
背景故事¶
犀牛坦克的设计团队用一个特征矩阵检验新型号。各位置的特征独立生成,但每个位置采用的概率分布可能不同。团队希望矩阵中每行、每列都具有变化,请计算一台坦克通过检验的概率。
形式化问题描述¶
随机生成一个 \(n\times n\) 矩阵,每个元素属于 \(\{1,\ldots,m\}\) .对于位置 \((i,j)\) ,给定非负整数权重 \(w_{i,j,1},\ldots,w_{i,j,m}\) ,其取值为 \(c\) 的概率为
\[
p_{i,j,c}=\frac{w_{i,j,c}}{\sum_{d=1}^{m}w_{i,j,d}}
\]
所有位置相互独立。如果不存在元素全相同的行,也不存在元素全相同的列,矩阵就合格。求矩阵合格的概率。
令 \(P=10^9+7\) .将答案写成分数 \(a/b\) ,输出 \(a\cdot b^{-1}\bmod P\) ,其中 \(b^{-1}\) 为模 \(P\) 乘法逆元。给定范围保证每个位置的权重和在 \(1\) 到 \(P-1\) 之间,因此该表示存在。
输入格式¶
第一行两个整数 \(n,m\) .接下来 \(n^2\) 行,按矩阵从上到下、每行从左到右的顺序描述各位置。每行 \(m\) 个整数,依次为该位置取值 \(1\) 到 \(m\) 的权重。
输出格式¶
输出一个整数,表示合格概率的模 \(P\) 表示。
样例 1¶
输入¶
2 2
1 1
1 1
1 1
1 1
输出¶
125000001
解释¶
共有 \(16\) 个等概率矩阵,其中两种棋盘格排列合格,概率为 \(1/8\) ,对应模值为 \(125000001\) .
样例 2¶
输入¶
3 3
1 1 2
3 2 1
0 0 3
1 0 2
0 3 5
1 2 3
6 7 9
3 2 1
1 1 1
输出¶
875789148
解释¶
矩阵为 \(3 imes3\) ,每个位置有三种特征,按各自权重独立生成。
样例 3¶
输入¶
1 2
3 7
输出¶
0
解释¶
只有一个位置时,唯一的行与列都满足“元素全相同”,所以合格概率为零。
数据范围与保证¶
- \(1\le n\le5\) ,\(1\le m\le7\) .
- \(0\le w_{i,j,c}\le100000\) ,每个位置至少有一个正权重。
数据分组¶
| 分值比例 | 额外条件 |
|---|---|
| 100% | 无额外条件 |