제출 #1367801

#제출 시각아이디문제언어결과실행 시간메모리
1367801marizaShortcut (IOI16_shortcut)C++20
0 / 100
0 ms344 KiB
#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll INF=1e18;

long long find_shortcut(int n, vector<int> x, vector<int> d, int c){
    ll a[n]={};
    for(ll i=1; i<n; i++){
        a[i]=a[i-1]+x[i-1];
    }

    ll ans=INF;
    for(ll l=0; l<n; l++){
        for(ll r=l+1; r<n; r++){
            ll curr=0;

            // A <-> A
            ll prev=INF;
            for(ll i=0; i<=l; i++){
                prev=min(prev,a[i]-d[i]);
                curr=max(curr,a[i]-prev+d[i]);
            }

            // A <-> C
            for(ll i=r; i<n; i++){
                curr=max(curr,a[i]-prev+d[i]-max(0ll,a[r]-a[l]-c));
            }

            // A <-> B
            for(ll i=l+1; i<r; i++){
                curr=max(curr,min(a[i],a[r]-a[i]+c+a[l])-prev+d[i]);
            }

            // C <-> C
            prev=-INF;
            for(ll i=n-1; i>=r; i--){
                prev=max(prev,a[i]+d[i]);
                curr=max(curr,prev-a[i]+d[i]);
            }

            // B <-> C
            for(ll i=l+1; i<r; i++){
                curr=max(curr,prev+min(-a[i],-a[r]+a[i]-a[l]+c)+d[i]);
            }

            // B <-> B
            for(ll i=l+1; i<r; i++){
                for(ll j=i+1; j<r; j++){
                    curr=max(curr,min(a[j]-a[i],a[i]-a[l]+c+a[r]-a[j])+d[i]+d[j]);
                }
            }

            ans=min(ans,curr);
            // cout<<l<<"-"<<r<<": "<<curr<<endl;
        }
    }

    return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…