# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
455342 | qwerasdfzxcl | Bali Sculptures (APIO15_sculpture) | C++14 | 435 ms | 500 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int a[2020], dp2[2020];
bool dp[2020][2020];
void solve(int n, int r){
ll cur = 0, ans = 0;
for (int i=60;i>=0;i--){
for (int j=0;j<=n;j++) fill(dp2, dp2+2020, 1e9);
cur |= 1LL<<i;
ll cur2 = 0;
for (int j=1;j<=n;j++){
cur2 += a[j];
if ((cur2&cur)==(ans&cur2)) dp2[j] = 1;
ll cur3 = 0;
for (int l=j;l;l--){
cur3 += a[l];
if ((cur3&cur)==(ans&cur3)) dp2[j] = min(dp2[j], dp2[l-1]+1);
}
}
if (dp2[n]>r) ans |= 1LL<<i;
}
printf("%lld\n", ans);
exit(0);
}
int main(){
int n, l, r;
scanf("%d %d %d", &n, &l, &r);
for (int i=1;i<=n;i++) scanf("%d", a+i);
if (l==1) solve(n, r);
ll cur = 0, ans = 0;
for (int i=60;i>=0;i--){
for (int j=0;j<=n;j++) fill(dp[j], dp[j]+n+1, 0);
cur |= 1LL<<i;
ll cur2 = 0;
for (int j=1;j<=n;j++){
cur2 += a[j];
if ((cur2&cur)==(ans&cur2)) dp[j][1] = 1;
for (int k=2;k<=j;k++){
ll cur3 = 0;
for (int l=j;l>k-1;l--){
cur3 += a[l];
if (dp[l-1][k-1] && (cur3&cur)==(ans&cur3)) dp[j][k] = 1;
}
}
}
bool flag = 1;
for (int j=l;j<=r;j++) if (dp[n][j]) flag = 0;
if (flag) ans |= 1LL<<i;
}
printf("%lld\n", ans);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |