Submission #1118741

#TimeUsernameProblemLanguageResultExecution timeMemory
1118741MinbaevA Huge Tower (CEOI10_tower)C++17
45 / 100
410 ms262144 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast,unroll-loops")

using namespace std;
using namespace __gnu_pbds;

#define pb 		push_back
#define all(x) 	x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define f 		first
#define s 		second
#define int 	long long
#define ll 		long long
#define pii 	pair<int,int>
#define ar 		array
#define mps		make_pair

template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;}
template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;}

template<class T> using ste = tree<T, null_type, less_equal<T>,
rb_tree_tag, tree_order_statistics_node_update>;

const int inf = 3e18 + 7;
const int mod = 1e9 + 9;
const int N = 2e5 + 5;
const int md = 998244353;

int binpow(int a, int b, int m){
	if(b == 0)return 1;
	if(b % 2 == 0){
		int c = binpow(a,b/2,m);
		return (c*c)%m;
	}
	return (binpow(a,b-1,m)*a)%m;
}

int divi(int a, int b, int m){
	return (a*(binpow(b,m-2, m)))%m;
}

int n,m,k,q;
vector<int>g[2000];

void solve(){

	cin >> n >> k;
	vector<int>v(n);
	for(auto &to:v)cin >> to;
	
	int dp[(1<<n)][n]{};
	for(int i = 0;i<n;i++){
		dp[(1<<i)][i] = 1;
	}
	
	for(int mask = 1;mask<(1<<n);mask++){
		for(int i = 0;i<n;i++){
			if(mask >> i & 1 && dp[mask][i] > 0){	
				for(int j = 0;j<n;j++){
					if(!(mask >> j & 1)){
						if(v[j]-v[i] <= k){
							dp[mask+(1<<j)][j] += dp[mask][i];
							dp[mask+(1<<j)][j] %= mod;
						}
					}
				}
			}
		}
	}
	
	int res = 0;
	for(int i = 0;i<n;i++){
		res += dp[(1<<n)-1][i];
		res %= mod;
	}
	
	cout << res << "\n";
	


}
/*

*/
 signed main()
{
//	freopen("seq.in", "r", stdin);
//  freopen("seq.out", "w", stdout);
	ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
	int tt=1;//cin>>tt;
	while(tt--)solve();

}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...