Submission #35170

#TimeUsernameProblemLanguageResultExecution timeMemory
35170cheater2kBali Sculptures (APIO15_sculpture)C++14
100 / 100
186 ms2212 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2005; int n, A, B; long long a[N]; long long OR; // ------------------------------------------------ bool dp[110][110]; bool check(int x) { memset(dp, 0, sizeof dp); long long t = (OR >> x); dp[0][0] = 1; for (int i = 1; i <= n; ++i) { for (int gr = 1; gr <= B; ++gr) { for (int j = 0; j < i; ++j) { long long cur = ((a[i] - a[j]) >> x); if ((t & cur) == cur) dp[i][gr] = max(dp[i][gr], dp[j][gr-1]); } } } for (int gr = A; gr <= B; ++gr) if (dp[n][gr]) return true; return false; } void solve() { for (int i = 49; i >= 0; --i) { if (!check(i)) { OR |= (1LL << i); } } cout << OR << '\n'; } // ------------------------------------------------ int _dp[N]; int calc(int x) { for (int i = 1; i <= n; ++i) _dp[i] = n + 1; long long t = (OR >> x); for (int i = 1; i <= n; ++i) { for (int j = 0; j < i; ++j) { long long cur = ((a[i] - a[j]) >> x); if ((t & cur) == cur) _dp[i] = min(_dp[i], _dp[j] + 1); } } return _dp[n]; } void _solve() { for (int i = 49; i >= 0; --i) { if (calc(i) > B) OR |= (1LL << i); } cout << OR << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> A >> B; for (int i = 1; i <= n; ++i) cin >> a[i], a[i] += a[i-1]; if (A != 1) solve(); else _solve(); }
#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...