Submission #1050738

#TimeUsernameProblemLanguageResultExecution timeMemory
1050738manhlinh1501Bali Sculptures (APIO15_sculpture)C++17
46 / 100
159 ms67224 KiB
#include <bits/stdc++.h> using namespace std; using i64 = long long; const i64 oo64 = LLONG_MAX; const int MAXN = 2050; int N, L, R; int a[MAXN]; i64 ans = oo64; namespace subtask1 { bool is_subtask() { return N <= 20; } void solution() { if(is_subtask() == false) return; for(int mask = 0; mask < (1 << N); mask++) { vector<i64> b; b.emplace_back(0); int cb = (mask >> 0 & 1); for(int i = 0; i < N; i++) { if((mask >> i & 1) == cb) b.back() += a[i + 1]; else { b.emplace_back(a[i + 1]); cb ^= 1; } } i64 res = 0; for(i64 x : b) res |= x; if(L <= b.size() and b.size() <= R) ans = min(ans, res); } cout << ans; exit(0); } } namespace subtask23 { int dpL[MAXN][MAXN]; int dpR[MAXN][MAXN]; bool is_subtask() { for(int i = 1; i <= N; i++) { if(a[i] > 20) return false; } return N <= 100; } void solution() { memset(dpL, 0x3f, sizeof dpL); memset(dpR, -0x3f, sizeof dpR); dpL[0][0] = dpR[0][0] = 0; for(int i = 1; i <= N; i++) { int cur = 0; for(int j = i; j >= 1; j--) { cur += a[j]; for(int mask = 0; mask < (1 << 11); mask++) { dpL[i][mask | cur] = min(dpL[i][mask | cur], dpL[j - 1][mask] + 1); dpR[i][mask | cur] = max(dpR[i][mask | cur], dpR[j - 1][mask] + 1); } } } for(int mask = 0; mask < (1 << 11); mask++) { if(dpL[N][mask] > dpR[N][mask]) continue; if((L <= dpL[N][mask] and dpR[N][mask] <= R) or (L <= dpL[N][mask] and dpL[N][mask] <= R) or (L <= dpR[N][mask] and dpR[N][mask] <= R)) return cout << mask, void(0); } cout << "-1"; exit(0); } } signed main() { #define TASK "code" if (fopen(TASK ".inp", "r")) { freopen(TASK ".inp", "r", stdin); freopen(TASK ".out", "w", stdout); } ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> L >> R; for(int i = 1; i <= N; i++) cin >> a[i]; subtask1::solution(); subtask23::solution(); return (0 ^ 0); }

Compilation message (stderr)

sculpture.cpp: In function 'void subtask1::solution()':
sculpture.cpp:31:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |             if(L <= b.size() and b.size() <= R)
      |                ~~^~~~~~~~~~~
sculpture.cpp:31:43: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   31 |             if(L <= b.size() and b.size() <= R)
      |                                  ~~~~~~~~~^~~~
sculpture.cpp: In function 'int main()':
sculpture.cpp:79:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |         freopen(TASK ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sculpture.cpp:80:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |         freopen(TASK ".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...