题目描述
你能求出数列中总共有多少个 K 倍区间吗?
输入描述
输出描述
输出一个整数,代表 K 倍区间的数目。
输入输出样例
示例
输入
5 2
1
2
3
4
5
输出
6
运行限制
最大运行时间:2s
最大运行内存: 256M
源码:
import java.util.Scanner;
public class K倍区间 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
int k=scanner.nextInt();
int[] a=new int[n+1];
int[] sum=new int[n+1];
int[] dp=new int[k];//记录%k为i的前缀和的个数
long ans=0;
dp[0]=1;//!!!!!!!!!!! sum[0]%k=0 sum[0]
for (int i = 1; i < n+1; i++) {
a[i]=scanner.nextInt();
sum[i]=(sum[i-1]+a[i])%k;
ans+=dp[sum[i]];
dp[sum[i]]++;
}
System.out.println(ans);
}
}