cspj T2 90pts求调
  • 板块学术版
  • 楼主Yorg
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/21 21:15
  • 上次更新2023/11/2 12:08:19
查看原帖
cspj T2 90pts求调
617130
Yorg楼主2023/10/21 21:15

代码

//RP++; 

#include <bits/stdc++.h>

using namespace std;

long long n,d;

long long v[100020],Price[100020];

long long dist=0;

long long NowOil=0;

long long SumDist=0;

void read()
{
    scanf("%lld %lld",&n,&d);

    for(long long i=1;i<n;i++)
    {
        scanf("%lld",&v[i]);
        SumDist+=v[i];
    }

    for(long long i=1;i<=n;i++)
    {
        scanf("%lld",&Price[i]);
    }

    Price[n]=-1;
}

long long FindMin(long long x)
{
    dist=0;

    if(x==n)
    {
        return n+1;
    }

    for(long long i=x+1;i<=n;i++)
    {
        dist+=v[i-1];
        if(Price[i]<Price[x])
        {
            return i;
        }
    }


}

long long Ceil(long long a,long long b)
{
    if(a%b==0)
    {
        return a/b;
    }else {
        return a/b+1;
    }
}

void doit()
{
    long long Need=0;
    for(long long i=1;i<=n;)
    {
        long long NowGo=FindMin(i);

        Need+=Ceil(dist-NowOil,d)*Price[i];
        NowOil=Ceil(dist-NowOil,d)*d+NowOil-dist;
        SumDist-=dist;

        if(NowOil>=SumDist)
        {
            break;
        }

        i=NowGo;

    }

    printf("%lld",Need);
}

void solve()
{
    read();

    doit();
}

int main()
{
    freopen("road.in","r",stdin);
    freopen("road.out","w",stdout);

    solve();

    return 0;
}

WA on #3 #18

2023/10/21 21:15
加载中...