求助
查看原帖
求助
732523
ZGC1111楼主2022/10/16 20:18
#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<map>
#include<cstdio>
#include<string.h>
using namespace std;
int T, n;
double w[104], s[104], a[104];
int main() {
    cin >> T;
    while (T--) {
        double v0 = 0, vt = 0,ans=0,vm=0;
        double x1, x2, x3, t1, t2, t3;
        cin >> n;
        for (int i = 1; i <= n; i++) {
            cin >> w[i] >> s[i] >> a[i];
        }
        s[n + 1] = s[n];
        for (int i = 1; i <= n; i++) {
            vm = sqrt(2 * a[i] * w[i] + v0 * v0);//在该段路全程加速可达到的最大速度
            vm = min(vm, s[i]);
            if (vm >= s[i + 1]) {//最大速度大于下一段限速,则该段末速度为下一段限速
                vt = s[i + 1];
            }
            else {//最大速度小于下一段限速,末速度为最大速度
                vt = vm;
            }
            //vm等于v0全程减速,vm等于vt全程加速,vm等于一个值先加速后减速
            vm = sqrt(a[i] * w[i] + v0 * v0/2 + vt * vt/2);
            vm = min(s[i], vm);
            x1 = (vm * vm - v0 * v0) / (a[i]*2);
            x2 = (vm * vm - vt * vt) / (2 * a[i]);
            x3 = w[i] - x1 - x2;
            t1 = (vm - v0) / a[i];
            t2 = (vm - vt) / a[i];
            t3 = x3 / vm;
            ans += t1 + t2 + t3;
            v0 = vt;//赋给下一段用
        }
        cout << ans << endl;
        //printf("%.8f\n", ans);
    }
    return 0;
}

不清楚哪里错了,另外可以开放下载测试数据通道吗

2022/10/16 20:18
加载中...