Clarke and problem
Accepts: 169
Submissions: 372
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 1000 + 10
#define LL long long
#define INF 0x3f3f3f3f
const int mod = 1000000000 + 7;
int n, p;
int a[N], d[N][N];
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &p);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
memset(d, 0, sizeof d);
d[0][0] = 1;
for(int i = 1; i <= n; i++)
for(int j = 0; j < p; j++)
{
int tmp = ((LL)(j - a[i]) % p + p) % p;
d[i][j] = ((LL)d[i - 1][tmp] + d[i - 1][j]) % mod;
}
// for(int i = 0; i <= n; i++)
// {
// for(int j = 0; j < p; j++)
// cout << d[i][j] << " ";
// cout << endl;
// }
printf("%d\n", d[n][0]);
}
return 0;
}
/*
1
2 3
1 2
*/