Submission #1165370

#TimeUsernameProblemLanguageResultExecution timeMemory
1165370mysticmage45Bali Sculptures (APIO15_sculpture)C++20
21 / 100
2 ms328 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long const ll bitsize = 29; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll n, a, b; cin >> n >> a >> b; ll year[n+5]; for(ll i = 1; i <= n; i++){ cin >> year[i]; } if(a == 1){ ll sumyear[n+5][n+5]; for(ll l = 1; l <= n; ++l){ ll sumnow = 0; for(ll r = l; r <= n; ++r){ sumnow += year[r]; sumyear[l][r] = sumnow; } } ll ans = 0; for(ll digit = bitsize; digit >= 0; digit--){ //test if the i th digit in ans can be 1 ll dp[n+5]; dp[0] = 0; for(ll i = 1; i <= n; i++) dp[i] = 1e18; for(ll i = 0; i <= n; i++){ for(ll j = i+1; j <= n; j++){ bool pass = 1; ll thissum = sumyear[i+1][j]; //cout << i+1 << " " << j << " " << thissum << "\n"; for(ll k = digit+1; k <= bitsize; k++){ //if(digit == 3) cout << i << " " << j << " " << k << " : " << thissum << " " << (thissum>>k&1) << " " << (ans>>k&1) << "\n"; if(((thissum>>k&1) == 1) && ((ans>>k&1) == 0)){ //cout << " lsd lf\n"; pass = 0; } } if(thissum>>digit&1 == 1){ pass = 0; } if(pass){ //cout << digit << " : " << i << " " << j << "\n"; dp[j] = min(dp[j], dp[i]+1); } } } if(dp[n] > b){ ans += 1<<digit; } /*cout << "digit = " << digit << " : "; for(ll i = 0; i <= n; i++){ cout << dp[i] << " "; } cout << "\n"; cout << "test : "; for(ll i = 18; i >= 0; i--){ cout << (17>>i&1); } cout << "\n";*/ } cout << ans << "\n"; } else{ ll sumyear[n+5][n+5]; for(ll l = 1; l <= n; ++l){ ll sumnow = 0; for(ll r = l; r <= n; ++r){ sumnow += year[r]; sumyear[l][r] = sumnow; } } ll ans = 0; for(ll digit = bitsize; digit >= 0; digit--){ //test if the i th digit in ans can be 1 ll dp[n+5][n+5]; for(ll i = 0; i <= n; i++) for(ll j = 0; j <= n; j++) dp[i][j] = 1e18; dp[0][0] = 0; for(ll i = 0; i <= n; i++){ for(ll j = i+1; j <= n; j++){ bool pass = 1; ll thissum = sumyear[i+1][j]; for(ll k = digit+1; k <= bitsize; k++){ if(((thissum>>k&1) == 1) && ((ans>>k&1) == 0)){ pass = 0; } } if(thissum>>digit&1 == 1){ pass = 0; } if(pass){ //cout << digit << " : " << i << " " << j << "\n"; for(ll k = 0; k < n; k++) dp[j][k+1] = min(dp[j][k+1], dp[i][k]); } } } for(ll k = a; k <= b; k++){ if(dp[n][k] != 0){ //cout << digit << " " << k << "\n"; ans += (1<<digit); break; } } } cout << ans << "\n"; } } /* 6 1 3 8 1 2 1 5 4 6 2 3 8 1 2 1 5 4 */
#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...