Submission #1241690

#TimeUsernameProblemLanguageResultExecution timeMemory
1241690jacha03Bali Sculptures (APIO15_sculpture)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, A, B;
    cin >> N >> A >> B;
    vector<long long> Y(N + 1), prefix(N + 1, 0);
    for (int i = 1; i <= N; i++) {
        cin >> Y[i];
        prefix[i] = prefix[i - 1] + Y[i];
    }

    // Try to greedily build answer bit by bit (from highest to lowest bit)
    long long answer = 0;
    for (int bit = 60; bit >= 0; bit--) {
        long long candidate = answer;  // keep current bits
        // try to not set this bit
        vector<vector<bool>> dp(N + 1, vector<bool>(B + 1, false));
        dp[0][0] = true;

        long long mask = candidate;  // current bits fixed
        for (int i = 1; i <= N; i++) {
            for (int k = 1; k <= B; k++) {
                for (int j = 0; j < i; j++) {
                    if (!dp[j][k - 1]) continue;
                    long long sum = prefix[i] - prefix[j];
                    if ((sum & ~mask) == 0) {
                        dp[i][k] = true;
                        break;
                    }
                }
            }
        }

        bool ok = false;
        for (int x = A; x <= B; x++) {
            if (dp[N][x]) {
                ok = true;
                break;
            }
        }

        if (!ok) {
            answer |= (1LL << bit);  // must set this bit
        }
    }

    cout << answer << "\n";
    return 0;
}
#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...