제출 #958822

#제출 시각아이디문제언어결과실행 시간메모리
958822Yahia_EmaraBali Sculptures (APIO15_sculpture)C++17
100 / 100
348 ms1136 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define pb push_back #define LOOP(n) for(int rp=0;rp<(n);rp++) #define sz(x) int(x.size()) #define dbg(x) cout << (#x) << " : " << x << endl #define sq(x) ((x)*(x)) #define lsb(x) ((x)&(-(x))) #define sqm(x) mul((x),(x)) #define all(x) x.begin(),x.end() #define fs first #define sc second #define fsh cout.flush() #pragma GCC optimize("unroll-loops") //#define R real() //#define I imag() using namespace __gnu_pbds; using namespace std; #define OS tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> #define ofk order_of_key mt19937_64 rng(time(0)); int rnd(int l,int r){ return uniform_int_distribution<int>(l,r)(rng); } typedef long long ll; typedef long double dl; typedef complex<dl>cd; cd readcd(){ dl x,y; cin >> x >> y; return cd(x,y); } int MOD=1e9+7; const int SZ=7e5+7,MSZ=1e7+7; const ll INF=1e18+7; const dl eps=1e-18; ll trig(ll n){ return n*(n+1)/2; } int add(int x,int y,int MOD=MOD){ x+=y;if(x>=MOD)x-=MOD; return x; } int sub(int x,int y,int MOD=MOD){ x-=y;if(x<0)x+=MOD; return x; } int mul(int x,int y,int MOD=MOD){ return(x*1ll*y)%MOD; } int pwr(int x,ll b,int MOD=MOD){ int rt=1; while(b>0){ if(b&1)rt=mul(rt,x,MOD); x=mul(x,x,MOD),b>>=1; } return rt; } int inv(int x,int MOD=MOD){ return pwr(x,MOD-2,MOD); } int GEO(int S,int r,ll n,int MOD=MOD){ if(r==1)return mul((n+1)%MOD,S); return mul(S,mul(sub(pwr(r,n+1),1),inv(sub(r,1)))); } ll fp(ll x,ll b){ ll rt=1; while(b>0){ if(b&1)rt*=x; x*=x,b>>=1; } return rt; } struct chash{ static uint64_t splitmix64(uint64_t x){ x+=0x9e3779b97f4a7c15; x=(x^(x>>30))*0xbf58476d1ce4e5b9; x=(x^(x>>27))*0x94d049bb133111eb; return x^(x>>31); } size_t operator()(uint64_t x)const{ static const uint64_t FIXED_RANDOM=chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x+FIXED_RANDOM); } }; vector<int>rpr(int n){ vector<int>v; while(n>0)v.pb(n%10),n/=10; return v; } void reform(vector<int>&a){ for(int i=0;i<sz(a);i++){ if(a[i]<10)continue; if(i==sz(a)-1)a.pb(0); a[i+1]+=a[i]/10,a[i]%=10; } while(sz(a)>1&&a.back()==0)a.pop_back(); } void neg(vector<int>&a){ for(int i=0;i<sz(a);i++)a[i]*=-1; } vector<int>fftadd(vector<int>a,vector<int>b){ if(sz(a)<sz(b))swap(a,b); for(int i=0;i<sz(b);i++)a[i]+=b[i]; reform(a); return a; } vector<int>fftmul(vector<int>a,vector<int>b){ vector<int>c(sz(a)+sz(b)-1,0); for(int i=0;i<sz(a);i++){ for(int j=0;j<sz(b);j++){ c[i+j]+=a[i]*b[j]; } } reform(c); return c; } vector<int>fftpwr(vector<int>a,int b){ vector<int>ans=rpr(1); while(b>0){ if(b&1)ans=fftmul(ans,a); a=fftmul(a,a),b>>=1; } return ans; } int getN(){ int n;cin >> n; return n; } bitset<2007>dp[2007]; int n,A,B; ll a[2007]; bool f(ll X){ dp[n]>>=2007,dp[n][0]=1; for(int l=n-1;l>=0;l--){ ll s=0; dp[l]>>=2007; for(int r=l;r<n;r++){ s+=a[r]; if((s|X)==X)dp[l]|=dp[r+1]<<1; } } for(int i=A;i<=B;i++){ if(dp[0][i])return 1; } return 0; } int32_t main(){ ios_base::sync_with_stdio(0);cin.tie(0); //freopen("optmilk.in","r",stdin); //freopen("optmilk.out","w",stdout); //cout << fixed << setprecision(12); int tt=1; //cin >> tt; LOOP(tt){ cin >> n >> A >> B; for(int i=0;i<n;i++)cin >> a[i]; ll ans=(1ll<<41)-1; for(int i=40;i>=0;i--){ ans^=1ll<<i; if(!f(ans))ans^=1ll<<i; } cout << ans; } 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...