Submission #1262849

#TimeUsernameProblemLanguageResultExecution timeMemory
1262849nimoxideA Huge Tower (CEOI10_tower)C++20
20 / 100
411 ms78504 KiB
#include<bits/stdc++.h>
using namespace std;

const int MAXN = 100;
const long long MOD = 1e9 + 7;

int n, d, a[MAXN];
long long dp[30][1 << 20], answer;
vector<int> graph[MAXN];

void input();
void generateGraph();
void countLenNP();

int main() {
	input();
	generateGraph();
	countLenNP();
	cout << answer % MOD << endl;
}

void input() {
	cin >> n >> d;
	for (int i = 0; i < n; i++)
		cin >> a[i];
}

void generateGraph() {
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			if (a[i] - a[j] >= -d)
				graph[i].push_back(j);
}

void countLenNP() {
    for (int v = 0; v < n; v++)
		dp[v][1 << v] = 1;

    for (int mask = 1; mask < (1 << n); mask++) 
        for (int v = 0; v < n; v++) {
            if (!(mask & (1 << v))) 
				continue;
            for (int u : graph[v]) {
                if (mask & (1 << u)) 
					continue;
                dp[u][mask | (1 << u)] += dp[v][mask] % MOD;
                dp[u][mask] %= MOD;
        	}
        }
	
    for (int mask = 1; mask < (1 << n); mask++) 
        if (__builtin_popcount(mask) == n) 
            for (int v = 0; v < n; v++) {
                answer += dp[v][mask];
            	answer %= MOD;
			}
}
#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...