Submission #503847

#TimeUsernameProblemLanguageResultExecution timeMemory
503847pokmui9909Skyscraper (JOI16_skyscraper)C++14
100 / 100
173 ms77188 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll N, L; ll A[105]; ll D[105][105][1005][3]; const ll MOD = 1e9 + 7; void add(ll &x, ll y){ y %= MOD; x += y; x %= MOD; } int main(){ cin.tie(0) -> sync_with_stdio(false); cin >> N >> L; for(int i = 1; i <= N; i++){ cin >> A[i]; } if(N == 1){ cout << 1; return 0; } sort(A + 1, A + N + 1); A[N + 1] = 1e5; D[0][0][0][0] = 1; for(int i = 1; i <= N; i++){ for(int j = 1; j <= i; j++){ for(int k = 0; k <= L; k++){ for(int l = 0; l <= 2; l++){ ll C = (2 * j - l) * (A[i + 1] - A[i]); if(C > k) continue; add(D[i][j][k][l], D[i - 1][j - 1][k - C][l]); add(D[i][j][k][l], (2 * j - l) * D[i - 1][j][k - C][l]); if(l >= 1) add(D[i][j][k][l], (3 - l) * D[i - 1][j - 1][k - C][l - 1]); if(l == 1){ add(D[i][j][k][l], 2 * j * D[i - 1][j][k - C][l - 1]); } else if(l == 2) { if(i == N){ add(D[i][j][k][l], D[i - 1][j][k - C][l - 1]); } else if(j >= 2) { add(D[i][j][k][l], (j - 1) * D[i - 1][j][k - C][l - 1]); } } if(l == 0){ add(D[i][j][k][l], j * (j + 1) * D[i - 1][j + 1][k - C][l]); } else if(l == 1) { add(D[i][j][k][l], j * j * D[i - 1][j + 1][k - C][l]); } else { if(i == N){ add(D[i][j][k][l], D[i - 1][j + 1][k - C][l]); } else { add(D[i][j][k][l], j * (j - 1) * D[i - 1][j + 1][k - C][l]); } } } } } } ll ans = 0; for(int i = 0; i <= L; i++){ add(ans, D[N][1][i][2]); } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...