传送门:https://ac.nowcoder.com/acm/contest/7818/F
题意
给一个N * N的矩阵,每一位上都是1,求所有子矩阵的权值之和。
思路
$设n = 3;$ 考虑子矩阵大小为$i * j$的个数$x$,即该大小的所有子矩阵的权值为$x* i * j$。 $1 * 2$子矩阵:每行个数为$2$个,有$3$列,即总权值为$2 * 3 * (1 * 2)–2 * 3$为该矩阵在n*n矩阵中的个数,$1 * 2$为该子矩阵里的权值。 $2 3$子矩阵:每两行有$1$个,一共$2$个两行,权值为$2 3$,即总权值为$1 * 2 * 2 * 3$。
根据上面推导出:在$n*n$的矩阵中,有$i*j$子矩阵的个数为$(n - i + 1) * (n - j + 1)$,即总权值为$(n - i + 1) * (n - j + 1) * i * j$。 即总答案为: $$ans=\sum_{i=1}^n\sum_{j=1}^n(n - i + 1) * (n - j + 1) * i * j$$
$$ans=[\sum_{i=1}^n(n-i+1)i]^2$$
$$ans=[\frac{n^2(n+1)}{2}-\frac{n(n+1)(2n+1)}{6}+\frac{n(n+1)}{2}]^2$$
$$ans=[\frac{n * (n + 1)*(n+ 2)}{6}]^2$$
因为题目说会爆longlong,所以我这里用的是JAVA大数BigInteger,python也可(不过我不会)。
Code(71MS)
1 |
|
本文作者:jujimeizuo
本文地址: https://blog.jujimeizuo.cn/2020/10/02/2020-nowcoder-guoqing-2-f/
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0 协议。转载请注明出处!