Submission #837112

#TimeUsernameProblemLanguageResultExecution timeMemory
8371128pete8Bali Sculptures (APIO15_sculpture)C++14
50 / 100
108 ms468 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include<cmath> #include<set> #include<algorithm> #include<bitset> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define pb push_back #define all(x) x.begin(),x.end() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define p push #define fastio ios::sync_with_stdio(false);cin.tie(NULL); using namespace std; #define int long long const int mxn=3*1e5,mod=998244353,lg=48; void setIO(string name) { ios_base::sync_with_stdio(0); cin.tie(0); freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } void print(int a){ for(int i=lg;i>=0;i--)cout<<(((a&(1<<i))==0)?0:1); cout<<'\n'; } int ans=0,a,b,n; int dp[2002],ps[2002],dp2[2002][2002]; void solve(){ for(int bi=lg-1;bi>=0;bi--){ for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)dp2[i][j]=0; for(int i=0;i<n;i++){ if(((ps[i]>>bi)|(ans>>bi))==(ans>>bi))dp2[i][0]=1; for(int j=0;j<i;j++){ int tmp=ps[i]-ps[j]; bool yes=false; if(((tmp>>bi)|(ans>>bi))==(ans>>bi))yes=1; if(!yes)continue; for(int k=1;k<=n;k++)dp2[i][k]|=dp2[j][k-1]; } } bool ok=false; for(int i=a;i<=b;i++)ok|=dp2[n-1][i]; if(ok)ans|=(1ll<<bi); } cout<<ans; } int32_t main(){ fastio cin>>n>>a>>b; //find if its possible to set the ith bit 0 //if it can then we fix it vector<int>v(n); for(int i=0;i<n;i++)cin>>v[i]; for(int i=0;i<n;i++){ ps[i]=v[i]; if(i)ps[i]+=ps[i-1]; } a--; b--; if(a!=0){ solve(); return 0; } for(int bi=lg-1;bi>=0;bi--){ for(int i=0;i<n;i++)dp[i]=1e18; for(int i=0;i<n;i++){ if(((ps[i]>>bi)|(ans>>bi))==(ans>>bi))dp[i]=0; for(int j=0;j<i;j++){ int tmp=ps[i]-ps[j]; if(((tmp>>bi)|(ans>>bi))==(ans>>bi))dp[i]=min(dp[i],dp[j]+1); } } if(dp[n-1]>b)ans|=(1ll<<bi); } cout<<ans; }

Compilation message (stderr)

sculpture.cpp: In function 'void setIO(std::string)':
sculpture.cpp:32:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |  freopen((name+".in").c_str(),"r",stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sculpture.cpp:33:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |  freopen((name+".out").c_str(),"w",stdout);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...