# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
133570 | junodeveloper | Bali Sculptures (APIO15_sculpture) | C++14 | 991 ms | 676 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define sz(x) (int)x.size()
#define fi first
#define se second
using namespace std;
typedef long long ll;
int n, A, B, D[2010];
ll a[2010];
bool chk[2010][2010];
inline bool f(ll x,ll sum,int p) {
return (~x&sum)/(1ll<<p)==0;
}
bool Check1 (ll x, int p) {
int i,j,k;ll sum;
for(i=1;i<=n;i++) {
chk[i][1]=f(x,a[i],p);
for(j=2;j<=i;j++) {
chk[i][j]=false;
for(k=i-1;k>=j-1;k--) {
sum=a[i]-a[k];
if(f(x,sum,p)) {
chk[i][j]|=chk[k][j-1];
}
}
}
}
bool res=false;
for(i=A;i<=B;i++) res|=chk[n][i];
return res;
}
bool Check2(ll x, int p) {
memset(D,-1,sizeof(D));
queue<int> q;
q.push(n); D[n]=0;
int u, i;
while(!q.empty()) {
u=q.front(); q.pop();
if(u==0) return D[u]<=B;
for(i=0;i<u;i++) {
if(D[i]==-1 && f(x,a[u]-a[i],p)) {
D[i]=D[u]+1;
q.push(i);
}
}
}
return false;
}
int main() {
int task;
scanf("%d%d%d",&n,&A,&B);
if(n<=100) task=0;
else task=1;
int i;
for(i=1;i<=n;i++) {
scanf("%lld",a+i);
a[i]+=a[i-1];
}
ll res=0;
for(i=41;i>=0;i--) {
if(task) { if(!Check2(res,i)) res|=1ll<<i; }
else { if(!Check1(res,i)) res|=1ll<<i; }
}
printf("%lld",res);
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... |