返回题解分享
讨论 / 题解分享/ 帖子详情

k倍区间(编程题) - 题解

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
using ll=long long;
int a[N],cnt[N];
ll s[N],ans;
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,k;cin>>n>>k;
    cnt[0]=1;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		s[i]=s[i-1]+a[i];
        ans+=cnt[s[i]%k];
        cnt[s[i]%k]++;//利用同余原理,当余数相同的前缀合相减得到的区间必定是k的倍数
	}
	cout<<ans;
	return 0;
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!