제출 #601598

#제출 시각아이디문제언어결과실행 시간메모리
601598Soumya1Skyscraper (JOI16_skyscraper)C++17
100 / 100
152 ms2648 KiB
#include <bits/stdc++.h> #ifdef __LOCAL__ #include <debug_local.h> #endif using namespace std; const int mod = 1000000007; int dp[101][1001][3]; int new_dp[101][1001][3]; void testCase() { int n, l; cin >> n >> l; vector<int> a(n); for (int &i : a) cin >> i; if (n == 1) { cout << "1\n"; return; } auto add = [&](int a, int b) { return (a + b) % mod; }; auto mul = [&](int a, int b) { return (1LL * a * b) % mod; }; auto add_self = [&](int &a, int b) { (a += b) %= mod; }; sort(a.begin(), a.end()); dp[1][0][0] = 1; dp[1][0][1] = 2; for (int i = 1; i < n; i++) { for (int j = 1; j <= i; j++) { for (int s = 0; s <= l; s++) { for (int c = 0; c < 3; c++) { int v = (a[i] - a[i - 1]) * (2 * j - c); if (s + v > l) continue; // add new component add_self(new_dp[j + 1][s + v][c], mul(dp[j][s][c], j + 1 - c)); // combine two components add_self(new_dp[j - 1][s + v][c], mul(dp[j][s][c], j - 1)); // add to the beginning or end of one already available component add_self(new_dp[j][s + v][c], mul(dp[j][s][c], 2 * j - c)); // create end add_self(new_dp[j + 1][s + v][c + 1], mul(dp[j][s][c], 2 - c)); // create end and merge add_self(new_dp[j][s + v][c + 1], mul(dp[j][s][c], 2 - c)); } } } for (int j = 1; j <= i + 1; j++) { for (int s = 0; s <= l; s++) { for (int c = 0; c < 3; c++) { // debug(i, j, s, c, new_dp[j][s][c]); dp[j][s][c] = new_dp[j][s][c]; new_dp[j][s][c] = 0; } } } } int ans = 0; for (int i = 0; i <= l; i++) { add_self(ans, dp[1][i][2]); } cout << ans << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); testCase(); }

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

skyscraper.cpp: In function 'void testCase()':
skyscraper.cpp:18:8: warning: variable 'add' set but not used [-Wunused-but-set-variable]
   18 |   auto add = [&](int a, int b) { return (a + b) % mod; };
      |        ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...