问题描述
LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵。第一行的数字是1,2,…M,第二行的数字是M+1,M+2…2*M,以此类推,第N行的数字是(N-1)*M+1,(N-1)M+2…NM。
例如,N=3,M=4的矩阵是这样的:
1 2 3
4 5 6
7 8 9
10 11 12
对于身为智慧之神的LZK来说,这个矩阵过于无趣.于是他决定改造这个矩阵,改造会进行K次,每次改造会将矩阵的某一行或某一列乘上一个数字,你的任务是计算最终这个矩阵内所有数字的和,输出答案对109+7取模。
题目大意
给定一个顺序标号的矩阵,有若干次操作使得某一行或某一列乘上某一个数,求最后只一个矩阵的所有数之和。
题解
我们用数组rir_iri标记第iii行所有乘的数的积,用数组sis_isi标记第jjj列所有乘的数的积。
通过观察,可以发现第iii行第jjj列的数字编号为:m×(i−1)+jm\times(i-1)+jm×(i−1)+j。
显然对于每一个数,乘法的顺序不会对结果产生任何影响,因此我们可以先处理横向的乘法。
在做完横向的乘法以后,我们需要得到第j列所有数的和sumjsum_jsumj,则有:
sumj = ∑i=1nri×[m(i−1)+j]sum_j\ =\ \sum_{i=1}^{n}r_i\times[m(i-1)+j]sumj = i=1∑nri×[m(i−1)+j]
通过乘法分配律展开,得到:
sumj = ∑i=1nri×m(i−1)+∑i=1nri×jsum_j\ =\ \sum_{i=1}^{n}r_i\times m(i-1)+\sum_{i=1}^{n}r_i\times jsumj