下面是我写的代码。
#include
#include
using namespace std;
bool cmp(long long a, long long b)
{
return a < b;
}
int main()
{
int t;
cin >> t;
while(t--)
{
long long n, m, k, p;
cin >> n >> m >> k >> p;
long long arr[n];
for(int i = 0; i < n; i++)
{
scanf("%lld", &arr[i]);
}
sort(arr, arr + n, cmp);
long long ans = 0;
for(int i = 0; i + m <= n; i++)
{
int left = i, right = i;
bool flag = false;
for(int j = i + 1; j < n; j++)
{
if(arr[j] - arr[left] <= k && j - i >= m - 1)
{
right = j;
flag = true;
}
}
long long res = 1;
for(int j = right - left; j >= m; j--)
{
res *= j;
}
int l = m-1;
l = l < (right - left) / 2 ? l : right - left - l;
for(int j = 2; j <= l; j++)
{
res /= j;
}
if(flag == true)
{
ans = (ans + res) % p;
}
}
cout << ans << endl;
}
return 0;
}