AcWing 1230. K倍区间
原题链接
中等
作者:
我要出去乱说
,
2021-02-13 23:02:19
,
所有人可见
,
阅读 250
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n, k;
LL s[N];
int cnt[N];
int main()
{
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i ++ )
{
scanf("%d", &s[i]);
s[i] += s[i - 1]; //求前缀和
}
LL res = 0;
cnt[0] = 1 ; //默认第一个位置(s[0]),有(0%k==0), 所以cnt[0]=1;
for (int i = 1; i <= n; i ++ )
{
res += cnt[s[i] % k]; //若两个前缀和对k取模后余数相同,则这两个前缀和相减对k取模为0
cnt[s[i] % k] ++ ;
}
printf("%lld\n", res);
return 0;
}