Submission #949620

# Submission time Handle Problem Language Result Execution time Memory
949620 2024-03-19T12:43:36 Z HossamHero7 Hacker (BOI15_hac) C++14
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
void solve(){
    int n;
    cin>>n;
    vector<ll> v(n);
    for(auto &i:v) cin>>i;
    vector<ll> p(n);
    p = v;
    for(int i=1;i<n;i++) p[i] += p[i-1];
    auto getSum = [&](int l,int r){
        return p[r] - (l ? p[l-1] : 0);
    };
    ll ans = 0;
    for(int i=0;i<n;i++){
        int l = 0;
        int r = n - 1;
        ll ans1 = 0;
        while(l <= r){
            int md = l + r >> 1;
            int x = i + md;
            int y = i - md;
            if(x >= n && y < 0){
                r = md - 1;
                continue;
            }
            if(x < n && y >= 0){
                ans1 = getSum(i,x);
                //cout<<"! "<<md<<endl;
                l = md + 1;
                continue;
            }
            x %= n;
            y += n;
            y %= n;
            if(x < y){
                //cout<<md<<endl;
                if(x < i) ans1 = getSum(i,n-1) + getSum(0,x);
                else ans1 = getSum(i,x);
                l = md + 1;
            }
            else r = md - 1;
        }
        l = 0 , r = n - 1;
        ll ans2 = 1e18;
        while(l <= r){
            int md = l + r >> 1;
            int x = i + md;
            int y = i - md;
            if(x >= n && y < 0){
                r = md - 1;
                continue;
            }
            if(x < n && y >= 0){
                //cout<<"! "<<md<<endl;
                ans2 = getSum(y,i);
                l = md + 1;
                continue;
            }
            x %= n;
            y += n;
            y %= n;
            if(x < y){
                //cout<<md<<endl;
                if(y > i) ans2 = getSum(0,i) + getSum(y,n-1);
                else ans2 = getSum(y,i);
                l = md + 1;
            }
            else r = md - 1;
        }
        ans = max(ans , min(ans1 , ans2));
    }
    cout<<ans<<endl;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);      cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

Compilation message

hac.cpp: In function 'void solve()':
hac.cpp:22:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   22 |             int md = l + r >> 1;
      |                      ~~^~~
hac.cpp:49:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   49 |             int md = l + r >> 1;
      |                      ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -