1 条题解
-
1
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+5; ll a[N],sum[N],cnt[N]; int main(){ ios::sync_with_stdio(false),cin.tie(0); ll n,k,ans=0; cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; sum[i]=sum[i-1]+a[i]; // 统计前缀和 cnt[sum[i]%k]++; // 统计每种前缀和有多少个 } for(int i=0;i<k;i++){ // 针对每种前缀和计算组成的区间 // p个端点组成的区间有p(p-1)/2 ans+=cnt[i]*(cnt[i]-1)/2; } cout<<ans+cnt[0]; // 最后还需要再多加cnt[0]个起点为最左的区间 return 0; }
- 1
信息
- ID
- 681
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 38
- 已通过
- 8
- 上传者