思路:对k同余的数之间的差一定是k的倍数,所以我们只需要统计出k的同余类的个数即可。累加每个同余类中取m个数的方法数就是答案。注意开long long。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int MOD = 1e9 + 9;
long long n, m, k, a[MAXN];
long long C(long long n, long long r)
{
long long sum = 1;
for (int i = 1; i <= r; i++)
sum = sum * (n + 1 - i) / i;
return sum % MOD;
}
int main()
{
ios::sync_with_stdio(false);
while (cin >> n >> m >> k)
{
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++)
{
int t; cin >> t;
a[t%k]++;
}
long long ans = 0;
for (int i = 0; i < k; i++)
{
ans += C(a[i], m);
}
cout << ans % MOD << endl;
}
return 0;
}
/*
5 3 2
1 2 3 4 5
*/