제출 #1243486

#제출 시각아이디문제언어결과실행 시간메모리
1243486BuiDucManh123Skyscraper (JOI16_skyscraper)C++20
15 / 100
1 ms840 KiB
#include <bits/stdc++.h> #define fi first #define se second #define ll long long #define ull unsigned long long #define pii pair<int, int> #define pll pair<ll, ll> #define pb push_back #define taskname "" #define ld long double const int mod = 1e9+7; using namespace std; #define int ll int a[109], dp[109][109][1009][5]; signed main() { if (fopen(taskname".inp","r")) { freopen(taskname".inp","r",stdin); freopen(taskname".out","w",stdout); } ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, l; cin >> n >> l; for(int i = 1; i <= n; i++){ cin >> a[i]; } sort(a + 1, a + n + 1); a[n + 1] = a[n]; dp[0][0][0][0] = 1; for(int i = 1; i <= n; i++){ for(int j = 1; j <= i; j++){ for(int k = 1; k <= l; k++){ for(int m = 0; m < 3; m++){ if(j - m + 1 > n - i) continue; int diff = (a[i + 1] - a[i]) * (2 * j - m); if(diff > k) continue; dp[i][j][k][m] = (dp[i][j][k][m] + dp[i - 1][j - 1][k - diff][m]) % mod; if(m == 1){ dp[i][j][k][m] = (dp[i][j][k][m] + 2 * dp[i - 1][j - 1][k - diff][m - 1]) % mod; } if(m == 2){ dp[i][j][k][m] = (dp[i][j][k][m] + dp[i - 1][j - 1][k - diff][m - 1]) % mod; } dp[i][j][k][m] = (dp[i][j][k][m] + (2 * j - m) * dp[i - 1][j][k - diff][m] % mod) % mod; if(m == 1){ dp[i][j][k][m] = (dp[i][j][k][m] + 2 * j * dp[i - 1][j][k - diff][m - 1] % mod) % mod; } if(m == 2){ if(i == n){ dp[i][j][k][m] = (dp[i][j][k][m] + dp[i - 1][j][k - diff][m - 1]) % mod; }else{ if(j > 1){ dp[i][j][k][m] = (dp[i][j][k][m] + (j - 1) * dp[i - 1][j][k - diff][m - 1] % mod) % mod; } } } if(m == 2){ if(i == n){ dp[i][j][k][m] = (dp[i][j][k][m] + dp[i - 1][j + 1][k - diff][m]) % mod; }else{ dp[i][j][k][m] = (dp[i][j][k][m] + j * (j - 1) % mod * dp[i - 1][j + 1][k - diff][m] % mod) % mod; } } if(m == 1){ dp[i][j][k][m] = (dp[i][j][k][m] + j * j % mod * dp[i - 1][j + 1][k - diff][m] % mod) % mod; } if(m == 0){ dp[i][j][k][m] = (dp[i][j][k][m] + j * (j + 1) % mod * dp[i - 1][j + 1][k - diff][m] % mod) % mod; } } } } } int ans = 0; for(int k = 1; k <= l; k++){ ans = (ans + dp[n][1][k][2]) % mod; } cout << ans; return 0; }

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

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