[HDOJ5935]Car(精度,数学)
Posted tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HDOJ5935]Car(精度,数学)相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5935
题意:有个老司机在开车, 开车过程中车的速度是不减的. 交警记录了这个老司机在nn
个时间点的位置, 但是时间位置. 已知老司机从位置0出发, 记录的时间点都是整数, 问经过第nn
个位置最少需要的时间.
题解:通过最后一段路程的时间肯定为 1 秒,只需由速度不降原则倒推出每一段所通过的最小整数时间即可。
原来卡了精度,好坑呀。。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 100100; 5 const double eps = 1e-9; 6 int n, a[maxn]; 7 8 int main() { 9 // freopen("in", "r", stdin); 10 int T, _ = 1; 11 scanf("%d", &T); 12 while(T--) { 13 printf("Case #%d: ", _++); 14 scanf("%d", &n); 15 for(int i = 1; i <= n; i++) { 16 scanf("%d", &a[i]); 17 } 18 int ret = 1; 19 double v = a[n] - a[n-1]; 20 for(int i = n-1; i >= 1; i--) { 21 int x = a[i] - a[i-1]; 22 if(x <= v + eps) { 23 v = x; 24 ret++; 25 } 26 else { 27 double t = (double(x - eps) / v); 28 ret += int(t + 1); 29 v = (double(x) / int(t + 1)); 30 } 31 } 32 cout << ret << endl; 33 } 34 return 0; 35 }
以上是关于[HDOJ5935]Car(精度,数学)的主要内容,如果未能解决你的问题,请参考以下文章