#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;
}
不清楚哪里错了,另外可以开放下载测试数据通道吗