제출 #1150022

#제출 시각아이디문제언어결과실행 시간메모리
1150022cpismylifeOwOSkyscraper (JOI16_skyscraper)C++20
100 / 100
382 ms316724 KiB
#include <bits/stdc++.h> using namespace std; const long long mod = 1e9 + 7; const int MaxN = 1e2 + 5; const int MaxK = 1e3 + 5; int n, l; int arr[MaxN]; void Inp() { cin >> n >> l; for (int x = 1; x <= n; x++) { cin >> arr[x]; } sort(arr + 1, arr + n + 1, greater<int>()); } long long F[2][2][MaxN][MaxN][MaxK]; void Exc() { if (n == 1) { cout << 1; return; } F[0][0][0][0][0] = 1; for (int x = 1; x <= n; x++) { for (int le = 0; le < 2; le++) { for (int ri = 0; ri < 2; ri++) { for (int y = 1; y <= n; y++) { for (int z = 0; z <= l; z++) { long long& res = F[le][ri][x][y][z]; res = 0; if (x < n && ((le == 1) + (ri == 1) > y)) { continue; } int p = z - (2 * y - (le == 1) - (ri == 1)) * (arr[x] - arr[x + 1]); if (p < 0) { continue; } res = (res + F[le][ri][x - 1][y][p] * (2 * y - (le == 1) - (ri == 1)) % mod) % mod; if (le == 1 && y > 0) { res = (res + F[0][ri][x - 1][y - 1][p]) % mod; } if (ri == 1 && y > 0) { res = (res + F[le][0][x - 1][y - 1][p]) % mod; } if (y > 0) { res = (res + F[le][ri][x - 1][y - 1][p]) % mod; } if (y < n) { int k = y + 1 - (le == 1) - (ri == 1); long long m = ((le == 1) * k + (ri == 1) * k + 1ll * (k - 1) * k + (y == 1 && le == 1 && ri == 1 && x == n)) % mod; res = (res + F[le][ri][x - 1][y + 1][p] * m % mod) % mod; //if (le == 0 && ri == 1 && x == 3 && y == 1 && z == 5 && res > 0) cout << k << " "; } if (le == 1) { int k = y - (ri == 1 && x < n); res = (res + F[0][ri][x - 1][y][p] * k % mod) % mod; } if (ri == 1) { int k = y - (le == 1 && x < n); res = (res + F[le][0][x - 1][y][p] * k % mod) % mod; } } } } } } //cout << F[0][1][3][1][5] << " "; long long res = 0; for (int x = 0; x <= l; x++) { res = (res + F[1][1][n][1][x]) % mod; //cout << F[1][1][n][1][x] << " "; } cout << res; } int main() { //freopen("C.INP", "r", stdin); //freopen("C.OUT", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); int test = 1; //cin >> test; for (int x = 1; x <= test; x++) { Inp(); Exc(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...