1 :买三赠一
N个数的数组,求有多少个连续数和能被M整除
-
先把每个位置上的值先模上K,得到一个方便计算且加和后不会太大的数组
-
新建数组s,s[i] = sum(A[0]…A[i]),然后模K(s[i]范围0-K)
-
如果A[i]+…+A[j]整除
- 也就是s[j]-s[i-1]==0
-
也就是s[i-1]和s[j]相等啊
- 我令s[-1]==0啊!
计算零出现 :
计算1出现
:
.
.
.
计算K-1出现
:
- 将s数组化为一个字典,记录每个值出现的次数
- 设同一值出现的次数为v
- 则能够组合成的有效解个数为v*(v-1)/2,
- 最后把所有的值的计算结果加起来即可。
中奖的号码:0-9,最小的代价
- 至少k个连续
222 3 44
- 至少4个连续