Submission #1113294

#TimeUsernameProblemLanguageResultExecution timeMemory
1113294cpptowinUplifting Excursion (BOI22_vault)C++17
100 / 100
1225 ms3656 KiB
#include <bits/stdc++.h> #define fo(i, d, c) for (int i = d; i <= c; i++) #define fod(i, c, d) for (int i = c; i >= d; i--) #define maxn 1000010 #define fi first #define se second #define pb emplace_back #define en cout << "\n"; #define int long long #define inf (int)4e18 #define bitcount(x) __builtin_popcountll(x) #define pii pair<int, int> #define vii vector<pii> #define lb(x) x & -x #define bit(i, j) ((i >> j) & 1) #define offbit(i, j) (i ^ (1LL << j)) #define onbit(i, j) (i | (1LL << j)) #define vi vector<int> #define all(x) x.begin(), x.end() #define ss(x) (int)x.size() #define UNIQUE(v) v.erase(unique(all(v)),v.end()) template <typename T1, typename T2> bool minimize(T1 &a, T2 b) { if (a > b) { a = b; return true; } return false; } template <typename T1, typename T2> bool maximize(T1 &a, T2 b) { if (a < b) { a = b; return true; } return false; } using namespace std; const int nsqrt = 450; const int mod = 1e9 + 7; void add(int &x, int k) { x += k; x %= mod; if(x < 0) x += mod; } void del(int &x, int k) { x -= k; x %= mod; if(x < 0) x += mod; } int m,lim; int a[maxn],c[maxn]; main() { #define name "TASK" if (fopen(name ".inp", "r")) { freopen(name ".inp", "r", stdin); freopen(name ".out", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> m >> lim; fo(i,0,2 * m) cin >> a[i]; int sum = 0; fo(i,0,m) { sum += (i - m) * a[i]; c[i] = a[i]; } fo(i,m + 1,2 * m) { c[i] = min(a[i],(lim - sum) / (i - m)); sum += c[i] * (i - m); } fo(i,0,m - 1) { int val = min(a[i],(lim - sum) / (m - i)); c[i] -= val; sum += val * (m - i); } if(abs(sum - lim) > m) return cout << "impossible",0; vii things; int tot = 0; fo(i,0,2 * m) { tot += c[i]; if(i == m) continue; int k = 1,s = min(m * m,a[i] - c[i]); while(k <= s) { things.pb(k * (i - m),k); s -= k; k *= 2; } if(s > 0) things.pb(s * (i - m),s); k = 1,s = min(c[i],m * m); while(k <= s) { things.pb(k * (m - i),-k); s -= k; k *= 2; } if(s > 0) things.pb(s * (m - i),-s); } int n = ss(things); int N = m * m; vi f(2 * N + 10,-inf),dp(2 * N + 10,-inf); dp[N] = f[N] = 0; for(auto [val,fre] : things) { fo(i,0,2 * N) if(i - val <= 2 * N and i - val >= 0 and dp[i - val] != -inf) maximize(f[i],dp[i - val] + fre); dp = f; } if(f[lim - sum + N] + tot >= 0) cout << f[lim - sum + N] + tot; else cout << "impossible"; }

Compilation message (stderr)

vault.cpp:59:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   59 | main()
      | ^~~~
vault.cpp: In function 'int main()':
vault.cpp:112:9: warning: unused variable 'n' [-Wunused-variable]
  112 |     int n = ss(things);
      |         ^
vault.cpp:64:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   64 |         freopen(name ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
vault.cpp:65:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |         freopen(name ".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...
#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...