2020-4-10pdd

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啊!

计算零出现 v 0 v_0 : v 0 ( v 0 + 1 ) 2 \frac{v_{0}(v_{0}+1)}{2}

计算1出现 v 1 v_1 : v 1 ( v 1 1 ) 2 \frac{v_{1}(v_{1}-1)}{2}
.
.
.
计算K-1出现 v K 1 v_{K-1} : v K 1 ( v K 1 1 ) 2 \frac{v_{K-1}(v_{K-1}-1)}{2}

  • 将s数组化为一个字典,记录每个值出现的次数
  • 设同一值出现的次数为v
    • 则能够组合成的有效解个数为v*(v-1)/2,
    • 最后把所有的值的计算结果加起来即可。

中奖的号码:0-9,最小的代价

  • 至少k个连续

222 3 44

  • 至少4个连续

发布了558 篇原创文章 · 获赞 295 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/zhoutianzi12/article/details/105445290