题解:CF2276C Subarrays
题目大意
给定
平衡子数组满足的条件:
- 子数组中元素和能被
k 整除。 - 子数组中元素的个数大于
k 。
解题思路
用
那平衡子数组定义的第二条中,用
代码
#include<bits/stdc++.h>
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--){
int n,k,a[200005],ans=0;
cin>>n>>k;
vector<int> q(k,0),s(n+5);
for(int i=1;i<=n;i++) cin>>a[i],s[i]=(s[i-1]+a[i])%k;
for(int i=1;i<=n;i++){
int l=i-k-1;
if(l>=0) q[s[l]]++;//记录每个余数出现的次数
ans+=q[s[i]];
}cout<<ans<<"\n";
}
return 0;
}