Submission #874375

#TimeUsernameProblemLanguageResultExecution timeMemory
874375IrateA Huge Tower (CEOI10_tower)C++14
45 / 100
1092 ms262144 KiB
#include<bits/stdc++.h> using namespace std; const int MOD = 1e9 + 9; int n, d; vector<int>v; int dp[20][(1 << 20)]; int rec(int indx, int mask){ int res = 0; if(mask == 0)return 1; if(dp[indx][mask] != -1)return dp[indx][mask]; for(int i = 0;i < n;++i){ if((mask & (1 << i)) && v[indx] + d >= v[i]){ res += rec(i, mask ^ (1 << i)); res %= MOD; } } return dp[indx][mask] = res; } vector<vector<int>>G; vector<bool>vis; int cnt = 0; int result = 0; void dfs(int node){ vis[node] = 1; cnt++; if(cnt == n){ result++; } for(int &v : G[node]){ if(!vis[v]){ dfs(v); } } vis[node] = 0; cnt--; } int main() { // ios_base::sync_with_stdio(0); // cin.tie(0); cin >> n >> d; v.resize(n); for(int i = 0;i < n;++i){ cin >> v[i]; } if(n <= 20){ int res = 0; for(int i = 0;i < 20;++i){ for(int j = 0;j < (1 << 20);++j){ dp[i][j] = -1; } } for(int i = 0;i < n;++i){ res += rec(i, ((1 << n) - 1) ^ (1 << i)); res %= MOD; } cout << res; } else{ G.resize(n + 1); vis.resize(n + 1); for(int i = 1;i <= n;++i){ for(int j = 1;j <= n;++j){ if(i == j)continue; if(v[i - 1] + d >= v[j - 1])G[i].push_back(j); } } for(int i = 1;i <= n;++i){ dfs(i); } cout << result; } }
#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...