제출 #1305043

#제출 시각아이디문제언어결과실행 시간메모리
1305043LIABootfall (IZhO17_bootfall)C++17
100 / 100
626 ms8036 KiB
// // Created by liasa on 23/11/2025. // #include <bits/stdc++.h> using namespace std; #define ll long long #define v vector #define lp(i, s, e) for (int i = s; i < e; ++i) #define pll pair<ll, ll> int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n; ll sum1 = 0; cin >> n; v<ll> a(n); ll mx = 0; lp(i, 0, n) { cin >> a[i]; sum1 += a[i]; mx = max(mx, a[i]); } mx *= n; mx += 2; v<ll> dp(mx); dp[0] = 1; const ll mod = 1e9 + 7; for (auto it : a) { for (ll sum = mx - 1; sum >= it; --sum) { dp[sum] += dp[sum - it]; dp[sum] %= mod; } } if (sum1 % 2 != 0 || dp[sum1 / 2] == 0) { cout << 0 << endl; return 0; } v<ll> pos(mx + 1); v<ll> last(mx, -1); lp(i, 0, n) { ll it = a[i]; ll sumi = sum1 - a[i]; for (ll sum = it; sum < mx; ++sum) { dp[sum] -= dp[sum - it]; dp[sum] = (dp[sum] + mod) % mod; } for (ll j = 0; j <= sumi; ++j) { if (dp[j] > 0) { ll sum2 = abs(sumi - 2 * j); if (sum2 > 0 && last[sum2] != i) { pos[sum2]++; last[sum2] = i; } } } for (ll sum = mx - 1; sum >= it; --sum) { dp[sum] += dp[sum - it]; dp[sum] = (dp[sum] + mod) % mod; } } v<ll> answ; for (ll k = 1; k < mx; ++k) { if (pos[k] == n) answ.push_back(k); } cout << answ.size() << endl; for (auto it : answ) cout << it << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...