제출 #199211

#제출 시각아이디문제언어결과실행 시간메모리
199211Alexa2001Bali Sculptures (APIO15_sculpture)C++17
100 / 100
97 ms504 KiB
#include <bits/stdc++.h>

using namespace std;


typedef long long ll;
const int Nmax = 2005;


int dp[Nmax];
bitset<Nmax> can[Nmax];
int n, A, B;

ll s[Nmax];


bool check1(ll mask)
{
    int i, j;
    for(i=1; i<=n; ++i)
    {
        dp[i] = 1e9;
        for(j=0; j<i; ++j)
            if( ((s[i] - s[j]) | mask) == mask )
                dp[i] = min(dp[i], dp[j] + 1);
    }

    return dp[n] <= B;
}

bool check2(ll mask)
{
    int i, j, k;

    can[0][0] = 1;
    for(i=1; i<=n; ++i)
        {
            for(j=1; j<=B; ++j) can[i][j] = 0;

            for(k=0; k<i; ++k)
                if( ((s[i] - s[k]) | mask) == mask)
                    for(j=1; j<=B; ++j)
                        can[i][j] = can[i][j] | can[k][j-1];
        }

    for(i=A; i<=B; ++i)
        if(can[n][i]) return 1;
    return 0;
}

bool check(ll mask)
{
    if(A == 1) return check1(mask);
        else return check2(mask);
}

int main()
{
  //  freopen("input", "r", stdin);
    cin.sync_with_stdio(false); cin.tie(0);

    int i;
    cin >> n >> A >> B;
    for(i=1; i<=n; ++i) cin >> s[i], s[i] += s[i-1];

    for(i=0; (1LL<<i) <= s[n]; ++i); --i;

    ll ans = (1LL<<(i+1)) - 1;

    for(; i>=0; --i)
        if(check(ans ^ (1LL<<i)))
            ans ^= (1LL<<i);

    cout << ans << '\n';
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

sculpture.cpp: In function 'int main()':
sculpture.cpp:66:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
     for(i=0; (1LL<<i) <= s[n]; ++i); --i;
     ^~~
sculpture.cpp:66:38: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
     for(i=0; (1LL<<i) <= s[n]; ++i); --i;
                                      ^~
#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...