이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
# include <bits/stdc++.h>
# define FILE
using namespace std;
int n, a, b;
long long y[2010], ans;
bool special_case( long long mask ){
int mn[2010] = {};
for( int i = 1; i <= n; i ++ )mn[i] = 1e9;
for( int i = 1; i <= n; i ++ ){
for( int j = 1; j <= i; j ++ ){
if( (mask|(y[i]-y[j-1])) == mask ){
mn[i] = min( mn[i], mn[j-1] + 1 );
}
}
}
if( mn[n] <= b ){
return true;
}
else{
return false;
}
}
bool check( long long mask ){
if( a == 1 )return special_case( mask );
bool dp[n+1][n+1] = {};
dp[0][0] = 1;
for( int i = 1; i <= n; i ++ ){
for( int j = 1; j <= i; j ++ ){
if( (mask|(y[i]-y[j-1])) == mask ){
for( int k = 0; k < n; k ++ ){
if( dp[j-1][k] ) dp[i][k+1] = 1;
}
}
}
}
for( int i = a; i <= b; i ++ ){
if( dp[n][i] )return true;
}
return false;
}
int main(){
# ifdef FILEs
freopen( "input.txt", "r", stdin );
freopen( "output.txt", "w", stdout );
# endif
ios_base::sync_with_stdio(false);
cin >> n >> a >> b;
for( int i = 1; i <= n; i ++ ){
cin >> y[i];
y[i] += y[i-1];
}
ans = (1ll << 50)-1;
for( int i = 49; i >= 0; i -- ){
ans -= (1ll << i);
if( check( ans ) == false )ans += (1ll << i);
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |