参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int array[100005], t[100005]; //array记录每个元素值,t记录取余k,各余数对应前缀和的数量 int main()
{ios::sync_with_stdio(false); ll sum = 0, cnt = 0;int n, k;cin >> n >> k;for(int i = 0; i < n; i++){cin >> array[i];sum += array[i]; //sum表示前缀和 t[sum % k]++; //依次取余 }cnt = t[0]; //当前缀和本身可以整除k时,即可自身作为一个区间计算 for(int i = 0; i < k; i++){cnt += t[i]*(t[i]-1)/2; //也可以和其他余数相等的前缀和两两搭配,求搭配书 }cout << cnt;return 0;
}