赛前救急

1.

2.大树的用Python做

3. 

4. 思维题

5.K倍区间

一个经典的前缀和题目
在读入 (A_i) 的时候直接存入前 (i) 项和。
求区间 ([i,j]) 的和的时候,直接用前 (j) 项和 (S_j) 减去前 (i) 项和 (S_i) 就得到了,然后对其模 (K),判断是否为 (0) 即可。直接做会超时。
优化:
如果 ((S_i - S_j) %k = 0) ,那么 (S_i%k) 和 (S_j%k) 都等于 (0) 。
问题就转化为了,枚举终点坐标 (x) ,求有多少个数模(k)的余数是(S_x%k)。即查找某一个数出现了多少次。

开一个 (cnt) 数组, (cnt[x]) 表示,余数为 (x) 的数的个数。
即求的就是 (cnt[S_x%k]) ,每次算完就让 (cnt[S_x%k]++) 。

用一个数组去保存test数组中相同模的个数,所有的相同模的个数分别经过Cn2的计算后再加和,最后再加上本来就是k倍区间的数列个数即为要求结果 开一个 (cnt) 数组, (cnt[x]) 表示,余数为 (x) 的数的个数。即求的就是 (cnt[S_x%k]) ,每次算完就让 (cnt[S_x%k]++) 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值