Submission #92397

#TimeUsernameProblemLanguageResultExecution timeMemory
92397KLPPBali Sculptures (APIO15_sculpture)C++14
100 / 100
175 ms632 KiB
#include<iostream> using namespace std; typedef long long int lld; lld ans[60]; lld DP1[20001]; int n,a,b; lld arr[3000]; lld pow[60]; bool DP2[2000][2000]; void compute1(){ lld sum[n+1]; sum[0]=0; for(int i=0;i<n;i++){ sum[i+1]=sum[i]+arr[i]; } lld CMP=0; for(int i=0;i<60;i++)CMP+=(1-ans[i])*pow[i]; //cout<<CMP<<endl; DP1[0]=0; for(int i=1;i<=n;i++){ DP1[i]=100000; for(int j=0;j<i;j++){ lld A=sum[i]-sum[j]; //cout<<A<<endl; //cout<<(CMP&A)<<endl; if((CMP&A)==0){ DP1[i]=min(DP1[i],DP1[j]+1); } } //cout<<DP1[i]<<" "; } //cout<<endl; } void compute2(){ lld sum[n+1]; sum[0]=0; for(int i=0;i<n;i++){ sum[i+1]=sum[i]+arr[i]; } lld CMP=0; for(int i=0;i<60;i++)CMP+=(1-ans[i])*pow[i]; //cout<<CMP<<endl; for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++)DP2[i][j]=false; }DP2[0][0]=true; for(int i=1;i<=n;i++){ for(int part=1;part<=n;part++){ for(int j=0;j<i;j++){ lld A=sum[i]-sum[j]; //cout<<A<<endl; //cout<<(CMP&A)<<endl; if((CMP&A)==0){ DP2[i][part]=DP2[i][part]|DP2[j][part-1]; } } } //cout<<DP1[i]<<" "; } } int main(){ cin>>n>>a>>b; for(int i=0;i<n;i++)cin>>arr[i]; pow[0]=1; for(int i=0;i<59;i++)pow[i+1]=2*pow[i]; if(a==1){ for(int i=0;i<60;i++)ans[i]=1; for(int i=59;i>-1;i--){ ans[i]=0; compute1(); if(DP1[n]>b)ans[i]=1; } lld ANS=0; for(int i=0;i<60;i++)ANS+=ans[i]*pow[i]; cout<<ANS<<endl; return 0; } for(int i=0;i<60;i++)ans[i]=1; for(int i=59;i>-1;i--){ ans[i]=0; compute2(); ans[i]=1; for(int p=a;p<=b;p++){ if(DP2[n][p]){ ans[i]=0; } } } lld ANS=0; for(int i=0;i<60;i++)ANS+=ans[i]*pow[i]; cout<<ANS<<endl; return 0; }
#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...