P8649 [蓝桥杯 2017 省 B] k 倍区间 题解
每次取这个数组的前缀和与
另外,如果这个前缀和已经可以直接被
输出最后的个数即可。
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=100010;
int s[N],a[N];
map<int,int>mp;
signed main()
{
int n,k,ans=0;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=(s[i-1]+a[i])%k;
ans+=mp[s[i]];
mp[s[i]]++;
}
cout<<ans+mp[0];
}