Submission #1113275

#TimeUsernameProblemLanguageResultExecution timeMemory
1113275cpptowinUplifting Excursion (BOI22_vault)C++17
0 / 100
46 ms3296 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 N 90010 #define fi first #define se second #define pb emplace_back #define en cout << "\n"; #define int long long #define inf (int)1e18 #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[N],c[N]; 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]),val = (i - m); while(k <= s) { things.pb(val,k); s -= k; k *= 2; val *= 2; } if(s > 0) things.pb(s * (i - m),s); k = 1,s = min(c[i],m * m),val = m - i; while(k <= s) { things.pb(val,-k); s -= k; k *= 2; val *= 2; } if(s > 0) things.pb(s * (m - i),-s); } if(sum == lim) return cout << tot,0; int n = ss(things); vi f(2 * N + 1,-inf),dp(2 * N + 1,-inf); dp[N] = f[N] = 0; for(auto [val,fre] : things) { fo(i,0,N) if(i - val <= N and dp[i - val + N] != -inf) maximize(f[i + N],dp[i - val + N] + fre); dp = f; } if(f[lim - sum + N] + tot > 0) cout << f[sum + N] + tot; else cout << "impossible"; }

Compilation message (stderr)

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