求方案(思维)

题目描述
有n个正整数排成一行。你的目的是要从中取出一个或连续的若干个数,使它们的和能够被k整除。
例如,有6个正整数,它们依次为1,2,6,3,7,4。若k=3,则你可以取出1,2,6,或者2,6,3,7,也可以仅仅取出一个6或者3使你所取的数之和能被3整除。当然,满足要求的取法不止以上这4种。事实上,一共有7种取法满足要求。
给定n和k,以及这n个数。你的任务就是确定从这n个数中取出其中一个数或者若干连续的数,使它们的和能被k整除有多少方法。记Ha=1234567,由于取法可能很多,因此你只需要输出它mod Ha的值即可

输入
第一行为两个整数n,k。以下n行每行一个正整数,描述这个序列。

输出
输出一个整数,为答案mod Ha的结果。

样例输入
6 3
1
2
6
3
7
4

样例输出
7

提示
对于30%的数据,有1≤n≤1000
对于100%的数据,有1≤n≤500000,1≤k≤100000

思路
对该序列,求前缀和sum[i],对位置i<j,如果sum[i]%k == sum[j] % k ,可推知(sum[j]-sum[i])%k == 0,即可组成一种方法,所以ans=sum[0]+(sum[i]*sum[i]-1)/2

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值