50分求调
查看原帖
50分求调
341088
Fetalis_Hikari楼主2025/7/19 14:52
#include <bits/stdc++.h>
using namespace std;
int n, m, dr, price, reqnum, a[1000016], v[100016], d[100016], req[100016], reqlist[100016];
int main()
{
    scanf("%d%d", &n, &dr);//输入
    for (int i = 1; i <= n - 1; i++)
    {
        scanf("%d", &v[i]);
    }
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
    }
    m = a[1];
    reqlist[1] = 1;//第一个站点一定要加油
    reqnum = 1;
    for (int i = 1; i <= n - 1; i++)
    {
        if (a[i] < m)//在最便宜的地方加油
        {
            m = a[i];
            reqnum++;
            reqlist[reqnum] = i;
        }
    }
    d[1] = 0;
    for (int i = 2; i <= n; i++)
    {
        d[i] = d[i - 1] + v[i - 1];//d[i]表示到站点1的总距离
    }
    for (int i = 1; i <= n; i++)
    {
        req[i] = d[i] / dr;//需要油量(整数)
        if (d[i] % dr != 0) req[i]++;//向上取整
    }
    reqlist[reqnum + 1] = n;

    /*for (int i = 1; i <= reqnum; i++)
    {
        printf("%d ", reqlist[i]);
    }
    printf("\n");   */

    for (int i = 1; i <= reqnum; i++)//遍历需要加油的站点
    {
        price += a[reqlist[i]] * (req[reqlist[i + 1]] - req[reqlist[i]]);//计算油价
        //printf("%d %d\n", a[reqlist[i]], req[reqlist[i + 1]] - req[reqlist[i]]);
    }
    
    printf("%d\n", price);
    return 0;
}
2025/7/19 14:52
加载中...