Submission #208319

#TimeUsernameProblemLanguageResultExecution timeMemory
208319gratus907Bali Sculptures (APIO15_sculpture)C++17
100 / 100
306 ms584 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#pragma GCC optimize ("O3")
#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target ("avx,avx2,fma")
#pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define usecppio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int ll
#define all(x) ((x).begin()),((x).end())
#define eps 1e-7

int n, a, b;
int v[2020];
int psum[2020];

inline int rsum(int lft, int rgt)
{
    return psum[rgt]-psum[lft-1];
}
void solve_1()
{
    bitset<51> bton((1ll<<50)-1);
    for (int bt = 50; bt>=0; bt--)
    {
        int dp[2020];
        memset(dp, 0x7f, sizeof(dp));
        dp[0] = 0;
        bton[bt] = false;
        bton.flip();
        int x = bton.to_ullong();
        bton.flip();
        for (int i = 1; i<=n; i++)
        {
            for (int j = 0; j<i; j++)
            {
                int u = rsum(j+1, i);
                if ((u & x)==0)
                    dp[i] = min(dp[i], dp[j]+1);
            }
        }
        bton[bt] = dp[n]>b;
    }
    cout << bton.to_ullong() << '\n';
}
void solve_else()
{
    bitset<51> bton((1ll<<50)-1);
    for (int bt = 50; bt>=0; bt--)
    {
        bool dp[220][220];
        memset(dp, 0, sizeof(dp));
        for (int i = 0; i<=200; i++)
            dp[0][0] = 1;
        bton[bt] = false;
        bton.flip();
        int x = bton.to_ullong();
        bton.flip();
        for (int i = 1; i<=n; i++)
        {
            for (int j = 1; j<=b; j++)
            {
                for (int k = 0; k<i; k++)
                {
                    if (!dp[k][j-1]) continue;
                    int u = rsum(k+1, i);
                    if ((u & x)==0)
                        dp[i][j] |= dp[k][j-1];
                }
            }
        }
        bton[bt] = true;
        for (int i = a; i<=b; i++)
            if (dp[n][i])
                bton[bt] = false;
    }
    cout << bton.to_ullong() << '\n';
}
int32_t main()
{
    usecppio
    cin >> n >> a >> b;
    for (int i = 1; i<=n; i++)
        cin >> v[i];
    for (int i = 1; i<=n; i++)
        psum[i] = psum[i-1] + v[i];
    if (a == 1)
        solve_1();
    else solve_else();
}
#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...