到底是哪错了?大佬们快来看看,紧急求调!!!
查看原帖
到底是哪错了?大佬们快来看看,紧急求调!!!
648508
zjx_kimi楼主2023/9/19 23:24

到底是哪错了?大佬们快来看看,紧急求调!!!\Large到底是哪错了?大佬们快来看看,紧急求调!!!

#include <bits/stdc++.h>
#define exit                   \
    {                          \
        cout << "No Solution"; \
        return 0;              \
    }
using namespace std;
const int N = 100;
double dis[N], p[N];
double V, x, D;
double you, ans;
int n;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> x >> V >> D >> p[0] >> n;
    dis[n + 1] = x;
    for (int i = 1; i <= n; i++) {
        cin >> dis[i] >> p[i];
        if (dis[i] - dis[i - 1] > V * D) exit;
    }
    if (dis[n + 1] - dis[n] > V * D) exit;
    for (int i = 0; i <= n; i++) {
        int j;
        for (j = i + 1; j <= n; j++)
            if (p[j] < p[i]) break;
        if (dis[j] - dis[i] <= you * D) {
            you -= (dis[j] - dis[i]) * 1.0 / D;
            i = j - 1;
        } else if(dis[j] - dis[i] <= V * D){ 
            ans += (you - (dis[j] - dis[i]) * 1.0 / D) * p[i];
            you = 0;
            i = j - 1;
        } else {
            ans += (V - you) * p[i];
            you = V;
            int minn = i + 1;
            j = i;
            while(you >= (dis[j + 1] - dis[i]) * 1.0 / D) {
                if(p[minn] > p[j + 1]) 
                    minn = j + 1;
                j++;
            }
            you -= (dis[minn] - dis[i]) * 1.0 / D;
            i = j - 1;
            you = 0;
        }
    }
    printf("%.2f", -ans);
}
2023/9/19 23:24
加载中...