제출 #1284151

#제출 시각아이디문제언어결과실행 시간메모리
1284151lmquanSkyscraper (JOI16_skyscraper)C++20
100 / 100
92 ms80580 KiB
#define taskname "" #include <bits/stdc++.h> using namespace std; const int kN = 103; const int kL = 1003; const long long kMod = 1e9 + 7; int n, l, a[kN]; long long dp[kN][kN][kL][5]; int main() { if (fopen(taskname".inp", "r")) { freopen(taskname".inp", "r", stdin); freopen(taskname".out", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> l; for (int i = 1; i <= n; i++) { cin >> a[i]; } if (n == 1) { cout << 1; } else { sort(a + 1, a + n + 1); dp[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 p = 0; p <= 2; p++) { int x = (a[i + 1] - a[i]) * (2 * j - p); if (k < x || i + j + 1 > p + n) { continue; } dp[i][j][k][p] += dp[i - 1][j - 1][k - x][p] + (p > 0) * (3 - p) * dp[i - 1][j - 1][k - x][p - 1] + (2 * j - p) * dp[i - 1][j][k - x][p]; if (p == 0) { dp[i][j][k][p] += j * (j + 1) * dp[i - 1][j + 1][k - x][p]; } else if (p == 1) { dp[i][j][k][p] += 2 * j * dp[i - 1][j][k - x][p - 1] + j * j * dp[i - 1][j + 1][k - x][p]; } else if (p == 2) { if (i == n) { dp[i][j][k][p] += dp[i - 1][j][k - x][p - 1] + dp[i - 1][j + 1][k - x][p]; } else { dp[i][j][k][p] += (j - 1) * dp[i - 1][j][k - x][p - 1] + j * (j - 1) * dp[i - 1][j + 1][k - x][p]; } } dp[i][j][k][p] %= kMod; } } } } long long result = 0; for (int i = 0; i <= l; i++) { result = (result + dp[n][1][i][2]) % kMod; } cout << result; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:13:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |     freopen(taskname".inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
skyscraper.cpp:14:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     freopen(taskname".out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...