Submission #523416

#TimeUsernameProblemLanguageResultExecution timeMemory
523416denniskimSkyscraper (JOI16_skyscraper)C++17
100 / 100
417 ms79812 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define MAX 9223372036854775807LL #define MIN -9223372036854775807LL #define INF 0x3f3f3f3f3f3f3f3f #define fi first #define se second ll n, L; ll a[110]; ll dp[110][110][1010][3]; ll ss = 1000000007; int main(void) { scanf("%lld %lld", &n, &L); for(ll i = 1 ; i <= n ; i++) scanf("%lld", &a[i]); sort(a + 1, a + 1 + n); dp[1][1][0][0] = 1; dp[1][1][0][1] = 2; dp[1][1][0][2] = 1; for(ll i = 2 ; i <= n ; i++) { for(ll j = 1 ; j <= i ; j++) { for(ll k = 0 ; k <= L ; k++) { for(ll l = 0 ; l <= 2 ; l++) { if(k - ((j - 1) * 2 - l) * (a[i] - a[i - 1]) >= 0 && (j - l) >= 0) dp[i][j][k][l] = (dp[i][j][k][l] + dp[i - 1][j - 1][k - ((j - 1) * 2 - l) * (a[i] - a[i - 1])][l] * (j - l) % ss) % ss; if(k - ((j - 1) * 2 - (l - 1)) * (a[i] - a[i - 1]) >= 0 && (l - 1) >= 0) dp[i][j][k][l] = (dp[i][j][k][l] + dp[i - 1][j - 1][k - ((j - 1) * 2 - (l - 1)) * (a[i] - a[i - 1])][l - 1] * (3 - l) % ss) % ss; if(k - (j * 2 - l) * (a[i] - a[i - 1]) >= 0) dp[i][j][k][l] = (dp[i][j][k][l] + dp[i - 1][j][k - (j * 2 - l) * (a[i] - a[i - 1])][l] * (2 * j - l) % ss) % ss; if(k - (j * 2 - (l - 1)) * (a[i] - a[i - 1]) >= 0 && (l - 1) >= 0) dp[i][j][k][l] = (dp[i][j][k][l] + dp[i - 1][j][k - (j * 2 - (l - 1)) * (a[i] - a[i - 1])][l - 1] * (3 - l) % ss) % ss; if(k - ((j + 1) * 2 - l) * (a[i] - a[i - 1]) >= 0) dp[i][j][k][l] = (dp[i][j][k][l] + dp[i - 1][j + 1][k - ((j + 1) * 2 - l) * (a[i] - a[i - 1])][l] * j % ss) % ss; } } } } ll ans = 0; for(ll i = 0 ; i <= L ; i++) ans = (ans + dp[n][1][i][2]) % ss; printf("%lld", ans % ss < 0 ? ans % ss + ss : ans % ss); return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:19:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |  scanf("%lld %lld", &n, &L);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~
skyscraper.cpp:22:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |   scanf("%lld", &a[i]);
      |   ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...