请大佬帮忙看看
查看原帖
请大佬帮忙看看
957755
foreverhazy楼主2024/7/4 17:23

只有样例过了

#include<bits/stdc++.h>
using namespace std;
int n,d;
int ML=0;//剩余可行使路程
int allmoney=0; //总花费
int sum=1;//当前的站点数
int t[(int)1e5+10],m[(int)1e5+10];
int main() {
    freopen("road2.in","r",stdin);
    cin>>n>>d;
    for(int i=2;i<=n;i++) {
        cin>>t[i];
    }
    for(int i=1;i<=n;i++) {
        cin>>m[i];
    }
    while(sum!=n) {
        if(ML<t[sum+1]) {   //油不够
            int cnt=0;  //站数
            for(int i=sum+1;i<=n;i++) { //查看当前油价是否是最少
                if(m[i]>=m[sum]) {
                    cnt++;
                }else { //有价格更低的
                    break;
                }
            }
            int money=m[sum];
            int ml=0;   //要买升数
            
            if(cnt==0) {    //这站最贵只买这站的钱
                ml+=(t[sum+1]-ML)/d+((t[sum+1]-ML)%d!=0); //要买油的升数
            }else {
                int luchen=0;
                for(int i=sum;i<=sum+cnt;i++) { //统计路程
                    luchen+=t[i];
                }   
                ml+=(luchen-ML)/d+((luchen-ML)%d!=0); //要买油的升数
            }
            allmoney+=ml*money;
            ML+=ml*d;
            // cout<<endl<<sum<<" "<<ml<<" "<<ML<<endl;
        }
        ML-=t[sum+1];
        sum++;
    }
    cout<<allmoney<<endl;
    return 0;
}
2024/7/4 17:23
加载中...