Submission #1183400

#TimeUsernameProblemLanguageResultExecution timeMemory
1183400NoMercySkyscraper (JOI16_skyscraper)C++20
100 / 100
78 ms24136 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 102, MAXL = 1002, mod = 1e9 + 7; ll dp[MAXN][MAXN][MAXL][3]; int32_t main () { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, L; cin >> N >> L; vector<ll> arr(N + 1); for (int i = 0;i < N;i ++) { cin >> arr[i]; } sort(arr.begin(), arr.end() - 1); arr[N] = arr[N - 1]; if (N == 1) { cout << "1\n"; return 0; } dp[0][0][0][0] = 1; for (int i = 0;i < N;i ++) { ll diff = arr[i + 1] - arr[i]; for (int j = 0;j <= i;j ++) { for (int s = 0;s <= L;s ++) { for (int k = 0;k < 3;k ++) if (dp[i][j][s][k] > 0) { int sum = s + (2 * j + 2 - k) * diff; if (sum <= L) { dp[i + 1][j + 1][sum][k] = (1LL * (j + 1 - k) * dp[i][j][s][k] + dp[i + 1][j + 1][sum][k]) % mod; } if (k < 2) { sum = s + (2 * j + 1 - k) * diff; if (sum <= L) dp[i + 1][j + 1][sum][k + 1] = (1ll * (2 - k) * dp[i][j][s][k] + dp[i + 1][j + 1][sum][k + 1]) % mod; } if (j > 0) { sum = s + (2 * j - k) * diff; if (sum <= L) { dp[i + 1][j][sum][k] = (1ll * (2 * j - k) * dp[i][j][s][k] + dp[i + 1][j][sum][k]) % mod; } if (k < 2) { sum = s + (2 * j - k - 1) * diff; if (sum <= L) { dp[i + 1][j][sum][k + 1] = (1ll * (2 - k) * dp[i][j][s][k] + dp[i + 1][j][sum][k + 1]) % mod; } } } if (j >= 2) { sum = s + (2 * j - 2 - k) * diff; if (sum <= L) { dp[i + 1][j - 1][sum][k] = (1ll * (j - 1) * dp[i][j][s][k] + dp[i + 1][j - 1][sum][k]) % mod; } } } } } } ll ans = 0; for (int l = 0;l <= L;l ++) { ans += dp[N][1][l][2]; ans %= mod; } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...