Submission #343259

#TimeUsernameProblemLanguageResultExecution timeMemory
343259S2speedSkyscraper (JOI16_skyscraper)C++17
20 / 100
273 ms194796 KiB
#include<bits/stdc++.h> #include<fstream> using namespace std; #pragma GCC optimize ("Ofast") #define all(x) x.begin() , x.end() #define gcd __gcd typedef long long int ll; typedef pair<ll , ll> pll; typedef pair<int , int> pii; typedef long double db; struct piii { int first , second , third; }; const ll MAX_N = 1 << 14 , md = 1e9 + 7; ll tav(ll n , ll k){ ll res = 1; while(k > 0){ if(k & 1){ res *= n; } n *= n; k /= 2; } return res; } ll cnt[MAX_N][101][15]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n , l; ll ans = 0; cin>>n>>l; vector<ll> a(n); if(n <= 8){ for(int i = 0 ; i < n ; i++){ cin>>a[i]; } int sum = 0; sort(a.begin() , a.end()); for(int i = 1 ; i < n ; i++){ sum += abs(a[i] - a[i - 1]); } ans += (sum <= l); while(next_permutation(a.begin() , a.end())){ sum = 0; for(int i = 1 ; i < n ; i++){ sum += abs(a[i] - a[i - 1]); } ans += (sum <= l); } cout<<ans<<'\n'; return 0; } if(n > 14 || l > 100) return 0; for(int i = 0 ; i < n ; i++){ cin>>a[i]; } int h = 1 << n; for(int i = 0 ; i < h ; i++){ for(int j = 0 ; j < n ; j++){ cnt[i][0][j] = (__builtin_popcount(i) < 2); for(int q = 1 ; q < 101 ; q++){ cnt[i][q][j] = 0; } } } for(int i = 0 ; i < h ; i++){ if(__builtin_popcount(i) < 2) continue; int o = 1; for(int j = 0 ; j < n ; j++){ if(i & o){ int p = i ^ o , k = 1; for(int q = 0 ; q < n ; q++){ if(k & p){ for(int y = 0 ; y < 101 ; y++){ int d = y + abs(a[j] - a[q]); if(d > l) break; cnt[i][d][j] += cnt[p][y][q]; } } k *= 2; } } o *= 2; } } for(int i = 0 ; i <= l ; i++){ for(int j = 0 ; j < n ; j++){ ans += cnt[h - 1][i][j]; } } cout<<ans % md<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...