阿凡提的烦恼

题目描述:

从前国王总是为难阿凡提,但是每一次阿凡提都用他聪明的头脑一一化解了。但是这一次国王又来为难他了。国王这一次在一个用格子分好了的矩阵里面放了一些数字,然后国王想要阿凡提统计出所有子矩阵的和能被10整除的个数。刚开始,阿凡提还数得津津有味,可是发现随着矩阵的变大,这样的子矩阵的个数也大幅度的增多。而这个时候他也不甘心就这样被国王难住,可是要人工数,就显得太不现实了。

输入

第一行为2个正整数n,m表示矩阵的长和宽(0<n,m<256)。接下来有一个n行,m列的矩阵,矩阵的每个元素是一个正整数F[I,j](0<F[I,j]<maxlongint)。

输出

一共一行,为一个整数total(0<=total<=maxextended),表示符合条件的子矩阵的个数。

解题思路:

         首先考虑空间问题,存储一个矩阵用长整形会爆空间。所以尽量只存一个short型的矩阵。而对于nm最大范围,时间应该尽量控制在3重以内。

         首先读入的时候,用前缀和的思想,仅保存以(1,1)为左上角,以当前坐标为右下角的矩阵之和对10取模的余数。每个子矩阵设左上角为(x1,y1),右下角为(x2,y2),则这个矩阵的和为F[x2,y2]-F[x1,y2]-F[x2,y1]+F[x1,y1],整理这个式子得到(F[x2,y2]-F[x2,y1])+(F[x1,y2]-F[x1,y1])。移项后,发现实际上,只需要在统计的时候枚举y1,y2,满足F[x2,y2]-F[x2,y1]=F[x1,y2]-F[x1,y1](mod 10),这样就只需要统计两重循环中F[k,y2]-F[k,y1]对10取模的余数的个数,这样,在这些相同的数中任意取两个数,就能保证构成一个不重复的子矩阵,使得对10取模的余数为0。

         需要注意的是,在统计这些数的时候,对于F[k,y2]-F[k,y1]对10取模的余数为0的需要另作考虑,因为它们可以独立构成一个满足要求的子矩阵。

 代码:

在别的电脑上找不到了……等以后补吧……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值