题解:傻逼题
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define lint long long
#define N 17
using namespace std;
int n,all,a[N];
lint dp[1<<N][N];
inline int getv(int x,int p)
{
return (x&(1<<(p-1)))>>(p-1);
}
inline int delv(int x,int p)
{
return x^=(1<<(p-1));
}
inline int updv(int x,int p)
{
return x|=(1<<(p-1));
}
inline int gabs(int x)
{
return (x>0)?x:-x;
}
inline int output(int x)
{
for(int i=1;i<=n;i++)
cout<<getv(x,i);
return 0;
}
int main()
{
int t;scanf("%d%d",&n,&t);
all=(1<<n)-1;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dp[0][0]=1LL;
for(int i=1;i<=all;i++)
for(int j=1;j<=n;j++)
{
if(!getv(i,j)) continue;
dp[i][j]=dp[delv(i,j)][0];
for(int k=1;k<=n;k++)
if(getv(i,k)&&gabs(a[k]-a[j])>t)
dp[i][j]+=dp[delv(i,j)][k];
}
lint ans=0;
for(int i=1;i<=n;i++)
ans+=dp[all][i];
printf("%lld\n",ans);
return 0;
}