75分WA,求助
查看原帖
75分WA,求助
1520266
Xsk012楼主2025/7/28 10:58

第四个测试样例,答案是192.15,跑出来是191.98

#include <bits/stdc++.h>
using namespace std;
const int N = 10;
double D, C, d;
int n;
double dd[N], pp[N];

int main()
{
    cin >> D >> C >> d >> pp[0] >> n;
    dd[0] = 0; // 起点相当于第0个加油站
    dd[n + 1] = D, pp[n + 1] = 999; // 终点相当于为第n+1个加油站
    for (int i = 1; i <= n; i++)
    {
        cin >> dd[i] >> pp[i];
    }
    for (int i = 0; i <= n; i++)
    {
        if ((dd[i + 1] - dd[i]) > C * d) // 两个加油站的距离过大,无解
        {
            cout << "No Solution";
            return 0;
        }
    }

    int i = 0; // 当前到达哪个加油站
    double c_now = 0; // 当前的油量
    double p_now = 0; // 当前花的钱
    while (i != n + 1)
    {
        int j, move_i;
        for (move_i = i + 1; move_i <= n+1; move_i++)   // 加满油能到达的最远的加油站(或终点,此时为n+1)
        {
            if(move_i == n+1) break;     
            if (dd[move_i] - dd[i] > C * d)
            {
                move_i--; 
                break;
            }
        }
        for (j = i + 1; j <= n+1; j++) // 找到比当前油价更低的加油站j(或终点,此时为n+1)
        {
            if(j == n+1) break;
            if (pp[j] < pp[i])
                break;
        }

        if (j > move_i) // 无法到达,加满油,走到路程中油价最低的加油站
        {
            int o;
            double min_p = 999.0; // 找到move_i与i之间最少油价的加油站
            for (int k = i + 1; k <= move_i; k++)
            {
                if (pp[k] < min_p)
                {
                    o = k;
                }
            }
            p_now += (double)(C - c_now) * pp[i];
            c_now = (double)(C - (dd[o] - dd[i]) / d);
            i = o;
        }
        else // 能到达,让油刚好够
        {
            if ((dd[j] - dd[i]) / d >= c_now)
            {
                p_now += (double)((dd[j] - dd[i]) / d - c_now) * pp[i];
                c_now = 0.0;
            }
            else
            {
                c_now -= (double)(dd[j] - dd[i]) / d;
            }
            i = j;
        }
    }
    cout << fixed << setprecision(2) << p_now;
    return 0;
}
2025/7/28 10:58
加载中...