제출 #1281728

#제출 시각아이디문제언어결과실행 시간메모리
1281728Faisal_SaqibGrowing Vegetables is Fun 4 (JOI21_ho_t1)C++20
0 / 100
7 ms572 KiB
#include <iostream>
using namespace std;
#define ll long long
const int N=2e5+10;
ll a[N],b[N];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        // a[i]-=i;
    }
    ll ans=1e18;
    for(int k=1;k<=n;k++)
    {
        ll ad=0;
        for(int i=1;i<=k;i++)
        {
            a[i]-=i;
        }
        for(int i=2;i<=k;i++)
        {
            ad+=max(0ll,a[i-1]-a[i]);
        }
        // a[k] ---> a[k]+ad
        for(int i=1;i<=k;i++)
        {
            a[i]+=i;
        }
        // a[k]+=ad;
        for(int i=k;i<=n;i++)
        {
            a[i]+=i;
        }
        a[k]+=ad;
        int p=k;
        for(int i=k+1;i<=n;i++)
        {
            if(a[i-1]>=(a[i]+ad))
            {
                p=i;
                a[i]+=ad;
            }
            else
            {
                break;
            }
        }
        ll xd=0;
        for(int i=n-1;i>=k;i--)
        {
            xd+=max(0ll,a[i+1]-a[i]);
        }
        for(int i=k;i<=n;i++)
        {
            a[i]-=i;
        }
        for(int i=k;i<=p;i++)a[i]-=ad;
        // a[k]-=ad;
        // cout<<"At "<<k<<" "<<xd+ad<<endl;
        ans=min(xd+ad,ans);
        // a[k]+ad   a[k]+xd
        // we make a[k]
    }
    // for(int k=1;k<=n;k++)
    // {
    //     for(int i=k;i<=n;i++)
    //     {
    //         a[i]+=i;
    //     }
    //     ll xd=0;
    //     for(int i=n-1;i>=k;i--)
    //     {
    //         xd+=max(0ll,a[i+1]-a[i]);
    //     }
    //     for(int i=k;i<=n;i++)
    //     {
    //         a[i]-=i;
    //     }
    //     a[k]+=xd;
    //     ll ad=0;
    //     for(int i=1;i<=k;i++)
    //     {
    //         a[i]-=i;
    //     }
    //     for(int i=2;i<=k;i++)
    //     {
    //         ad+=max(0ll,a[i-1]-a[i]);
    //     }
    //     // a[k] ---> a[k]+ad
    //     for(int i=1;i<=k;i++)
    //     {
    //         a[i]+=i;
    //     }
    //     a[k]-=xd;
    //     cout<<"At "<<k<<" "<<xd+ad<<endl;
    //     ans=min(xd+ad,ans);
    //     // a[k]+ad   a[k]+xd
    //     // we make a[k]
    // }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...