Submission #1123842

#TimeUsernameProblemLanguageResultExecution timeMemory
1123842ReLiceSkyscraper (JOI16_skyscraper)C++20
15 / 100
176 ms260620 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define fr first #define sc second #define endl "\n" #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() using namespace std; const ll inf = 1e9; const ll N = 1e2 + 5; const ll M = 1e3 + 5; const ll mod = 1e9 + 7; ll dp[N][N][M][3]; vector<ll> a; ll del(ll i, ll j, ll m){ return (a[i + 1] - a[i]) * (2 * j - m); } signed main(){ //ios_base::sync_with_stdio(0); //cin.tie(0); //cout.tie(0); ll i, j; ll n, l; cin>>n>>l; a.resize(n); for(auto &i : a) cin>>i; sort(all(a)); a.pb(a.back()); memset(dp, 0, sizeof(dp)); dp[0][0][0][0] = 1; for(i=0;i<n;i++){ for(j=0;j<=(n + 1) / 2;j++){ for(ll k=0;k<=l;k++){ for(ll m=0;m<3;m++){ if(dp[i][j][k][m] == 0) continue; dp[i][j][k][m] %= mod; //cout<<i<<' '<<j<<' '<<k<<' '<<m<<endl; //cout<<dp[i][j][k][m]<<endl; //new without endpoint dp[i + 1][j + 1][k + del(i, j + 1, m)][m] += dp[i][j][k][m]; //new with endpoint if(m < 2) dp[i + 1][j + 1][k + del(i, j + 1, m + 1)][m + 1] += (2 - m) * dp[i][j][k][m] % mod; if(j == 0) continue; //part of existing without endpoint dp[i + 1][j][k + del(i, j, m)][m] += (2 * j - m) * dp[i][j][k][m] % mod; //part of existing with endpoint if(m == 1 && i == n - 1) dp[i + 1][j][k + del(i, j, m + 1)][m + 1] += dp[i][j][k][m] % mod; else if(m < 2) dp[i + 1][j][k + del(i, j, m + 1)][m + 1] += (j - m) * (2 - m) * dp[i][j][k][m] % mod; //join two components if(m == 2 && i == n - 1) dp[i + 1][j - 1][k + del(i, j - 1, m)][m] += dp[i][j][k][m] % mod; else dp[i + 1][j - 1][k + del(i, j - 1, m)][m] += (j - m) * (j - 1) * dp[i][j][k][m] % mod; } } } } ll ans = 0; for(i=0;i<=l;i++) ans = (ans + dp[n][1][i][2]) % mod; cout<<ans<<endl; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...