[HDOJ5935]Car(精度,数学)

时间:2024-10-13 14:03:26

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5935

题意:有个老司机在开车, 开车过程中车的速度是不减的. 交警记录了这个老司机在nn个时间点的位置, 但是时间位置. 已知老司机从位置0出发, 记录的时间点都是整数, 问经过第nn个位置最少需要的时间.

题解:通过最后一段路程的时间肯定为 1 秒,只需由速度不降原则倒推出每一段所通过的最小整数时间即可。

原来卡了精度,好坑呀。。

 #include <bits/stdc++.h>
using namespace std; const int maxn = ;
const double eps = 1e-;
int n, a[maxn]; int main() {
// freopen("in", "r", stdin);
int T, _ = ;
scanf("%d", &T);
while(T--) {
printf("Case #%d: ", _++);
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d", &a[i]);
}
int ret = ;
double v = a[n] - a[n-];
for(int i = n-; i >= ; i--) {
int x = a[i] - a[i-];
if(x <= v + eps) {
v = x;
ret++;
}
else {
double t = (double(x - eps) / v);
ret += int(t + );
v = (double(x) / int(t + ));
}
}
cout << ret << endl;
}
return ;
}