1 条题解

  • 1
    @ 2026-7-10 14:24:04
    #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
    上传者