【考题·数学】矩阵游戏(数学推导)

这篇博客介绍了LZK提出的矩阵游戏,玩家需要计算经过多次行或列乘数操作后矩阵中所有数字的和。通过数学推导,可以将问题简化为求解行积和列积,最终得出时间复杂度为O(n+m)的解决方案。解题关键在于处理横向乘法,利用乘法分配律进行化简,并注意在计算过程中避免溢出和正确取模。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

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×(i1)+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=1nri×[m(i1)+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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值