Submission #36800

#TimeUsernameProblemLanguageResultExecution timeMemory
36800imaxblueBali Sculptures (APIO15_sculpture)C++14
100 / 100
113 ms2048 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back
#define x first
#define y second
#define pii pair<int, int>
#define p3i pair<pii, int>
#define pll pair<ll, ll>
#define p3l pair<pll, ll>
#define lseg L, (L+R)/2, N*2+1
#define rseg (L+R)/2+1, R, N*2+2
#define ub upper_bound
#define lb lower_bound
#define p_q priority_queue
#define MN 1000000009

int n, a, b, dp2[2005], l, l2, l3;
bool dp[105][105];
ll k, psa[2005];
bool check(ll L){
    if (a==1){
        memset(dp2, 0x3f3f3f3f, sizeof dp2);
        dp2[0]=0;
        for (l=1; l<=n; ++l){
            for (l2=0; l2<l; ++l2){
                if (((psa[l]-psa[l2])&(~k))<L)
                dp2[l]=min(dp2[l], dp2[l2]+1);
            }
        }
        return (dp2[n]<=b);
    }
    memset(dp, 0, sizeof dp);
    dp[0][0]=1;
    for (l=1; l<=n; ++l){
        for (l2=0; l2<l; ++l2){
            for (l3=1; l3<=b; ++l3){
                if (((psa[l]-psa[l2])&(~k))<L)
                dp[l][l3]|=dp[l2][l3-1];
            }
        }
    }
    for (int l=a; l<=b; ++l)
        if (dp[n][l]) return 1;
    return 0;
}
int main(){
    scanf("%i%i%i", &n, &a, &b);
    for (int l=1; l<=n; ++l){
        scanf("%i", &psa[l]); psa[l]+=psa[l-1];
    }
    for (int l=41; l>=0; --l){
        //if (l<10) cout << k << endl;
        if (!check((1LL << l))) k+=(1LL << l);
    }
    cout << k;
    return 0;
}

Compilation message (stderr)

sculpture.cpp: In function 'int main()':
sculpture.cpp:51:28: warning: format '%i' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
         scanf("%i", &psa[l]); psa[l]+=psa[l-1];
                            ^
sculpture.cpp:49:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%i%i", &n, &a, &b);
                                ^
sculpture.cpp:51:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i", &psa[l]); psa[l]+=psa[l-1];
                             ^
#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...