75pts求助
查看原帖
75pts求助
492676
梦回江南楼主2022/10/21 13:14
#include <iomanip>
#include <iostream>
#include <algorithm>
// 数据类型简化
#define L unsigned long long
#define LL long long
#define I unsigned int
// cin/cout 优化
#define endl '\n'
// sort + unique
#define soun(nf, nl, m) sort(nf, nl); m = unique(nf, nl) - (nf)
// for 循环简化
#define ref(i, a, b, p) for (signed(i) = (a); (i) <= signed(b); (i) += signed(p))
#define gef(i, a, b, p) for (signed(i) = (a); (i) >= signed(b); (i) -= signed(p))
using namespace std;

double d1, c, d2, p1, n, ans;
struct station
{
    double d = 0, p = 0;
} s[10];

void work()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> d1 >> c >> d2 >> p1 >> n;
    s[0].d = 0, s[0].p = p1;
    s[int(n) + 1].d = d1, s[int(n) + 1].p = 0;
    ref (i, 1, n, 1)
        cin >> s[i].d >> s[i].p;
    double sum = 0;
    const double ch = c * d2;
    ref (i, 0, n, 0)
    {
        if (s[i + 1].d - s[i].d > ch)
        {    
            cout << "No Solution" << endl;
            return;
        }
        int cnt = i + 1;
        while (cnt <= n)
            if (s[cnt].d - s[i].d > ch)
                break;
            else 
                cnt++;
        // (cnt > n) ? cnt = n : cnt = cnt;
        int r = i + 1, p = 0;
        while (r <= cnt)
        {
            if (s[r].p < s[i].p)
            {   
                p = r; 
                break;
            }
            r ++;
        }
        if (p != 0)
        {
            sum = s[i].p * (s[p].d - s[i].d) / d2 - sum;
            ans += sum;
            i = p;
            sum = 0;
            continue;
        }
        r = i + 1, p = __INT_MAX__;
        int t = 0;
        while (r <= cnt)
        {
            if (s[r].p < p)
                p = s[r].p, t = r;
            r ++;
        }
        sum = s[i].p * c;
        ans += sum;
        sum -= s[i].p * (s[p].d - s[i].d) / d2;
        i = t;
    }
    cout << fixed << setprecision(2) << ans << endl;

    return ;
}

int main()
{
    work();

    return 0;
}

贪心,第五个点错了。

输入:

475.6 11.9 27.4 14.98 6
102.0 9.99
220.0 13.29
256.3 14.79
275.0 10.29
277.6 11.29
381.8 10.09

输出:

192.15

我的输出:

191.98
2022/10/21 13:14
加载中...