Submission #1245499

#TimeUsernameProblemLanguageResultExecution timeMemory
1245499nqknhtKitchen (BOI19_kitchen)C++20
52 / 100
9 ms13896 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define len(s) (ll) s.size() const ll I = 2e6 + 9; const ll lim = 1e18; using namespace std; int n, m, k, a[I], b[I], sum = 0, nrt[309][90009]; bitset<90009> dp[309], dp1; int main() { #define TN "bowling" if (fopen(TN ".inp", "r")) { freopen(TN ".inp", "r", stdin); freopen(TN ".out", "w", stdout); } cin.tie(0)->sync_with_stdio(0); cin >> n >> m >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; sum += a[i]; if (a[i] < k) { cout << "Impossible\n"; return 0; } } int sumb = 0; for (int i = 1; i <= m; i++) { cin >> b[i]; sumb += b[i]; } if (sumb < sum) { cout << "Impossible\n"; return 0; } sort(b + 1, b + m + 1); int sav = m + 1; for (int i = 1; i <= m; i++) if (b[i] >= n) { sav = i; break; } dp[0] |= 1; for (int i = sav; i <= m; i++) for (int j = i - sav; j >= 0; j--) dp[j + 1] |= (dp[j] << b[i]); for (int j = 0; j <= m - sav + 1; j++) { int cur = -1; for (int id = 90000; id >= 0; id--) { if (dp[j][id] == 1) cur = id; nrt[j][id] = cur; } } dp1 |= 1; for (int i = 1; i < sav; i++) dp1 |= (dp1 << b[i]); int rs = 2000000000; for (int i = 0; i <= 90000; i++) { if (dp1[i] == 0) continue; int att = k - (i / n); int mor = max(sum - i, 0); if (att <= 0 && i >= sum) { rs = min(rs, i - sum); continue; } if(att <= 0) continue; for (int lay = att; lay <= m - sav + 1; lay++) { if (nrt[lay][mor] == -1) continue; rs = min(rs, (nrt[lay][mor] + i) - sum); } } rs = (rs > 1000000000 ? -1 : rs); if (rs == -1) cout << "Impossible\n"; else cout << rs << "\n"; return 0; }

Compilation message (stderr)

kitchen.cpp: In function 'int main()':
kitchen.cpp:21:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         freopen(TN ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
kitchen.cpp:22:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |         freopen(TN ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...