求助,25分
查看原帖
求助,25分
1226854
ANDER_楼主2024/1/2 20:50
#include<iostream>
#include<cmath>
using namespace std;
double d1, c, d2, p, now, ans, m = 1000000;
int n;
bool flag = false;
struct node {
    double money, far;
}station[10];
int main() {
    scanf("%lf%lf%lf%lf%d", &d1, &c, &d2, &p, &n);
    station[0].far = 0;
    station[0].money = p;
    for(int i = 1 ; i <= n ; i ++) {
        scanf("%lf%lf", &station[i].far, &station[i].money);
    }
    for(int i = 0 ; i <= n ; i ++) {
        if(c * d2 < station[i].far) {
            printf("No Solution");
            return 0;
        } else if(i != 0) {
            if(now >= (station[i].far - station[i - 1].far) / d2) {
                continue;
            }
        } else {
            for(int j = i + 1 ; j <= n ; j ++) {
                m = min(m, station[j].money);
                if(station[j].money < station[i].money) {
                    ans += ((station[j].far - station[i].far) / d2 - now) * station[i].money;
                    now = (station[j].far - station[i].far) / d2;
                    flag = true;
                    break;
                }
            }
            if(flag) {
                flag = false;
                m = 1000000;
            } else {
                ans += ((m - station[i].far) / d2 - now) * station[i].money;
                now = (m - station[i].far) / d2;
                m = 1000000;
            }
        }
    }
    printf("%.2lf", ans);
    return 0;
}
2024/1/2 20:50
加载中...