HihoCoder - 1701

给定N个整数A1, A2, ... AN,小Hi希望从中选出M个整数,使得任意两个选出的整数的差都是K的倍数。  

请你计算有多少种不同的选法。由于选法可能非常多,你只需要输出对1000000009取模的结果。

Input

第一行包含三个整数N、M和K。  

第二行包含N个整数A1, A2, ... AN。  

对于30%的数据,2 ≤ M ≤ N ≤ 10  

对于100%的数据,2 ≤ M ≤ N ≤ 100 1 ≤ K, Ai ≤ 100

Output

一个整数表示答案。

Sample Input
5 3 2  
1 2 3 4 5
Sample Output

 
  

1


思路:余数相同的数,两两之差一定是k的倍数,在余数相同的里面取M,利用数学组合数。

代码参考:
#include 
#include
#include
#include
#include
#include
#include
#define max(a,b) a>b?a:b
#define ll long long
#define inf 0x3f3f3f3f

using namespace std;
int main()
{
    int a[110];
    int N,M,K;
    while(~scanf("%d%d%d",&N,&M,&K))
    {
        memset(a,0,sizeof(a));
        int n;
        ll A,B,ans=0;
        for(int i=0;i

你可能感兴趣的:(其它)