码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5935 Car

时间:2017-08-14 21:17:13      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:deb   cas   一个人   err   size   个数   debug   题意   思路   

题意:

一个人在开车 一个交警在抓拍

给了你n个数字 是每次抓拍时候的位置

这个人一直是不减速的 问从0到最后给你的那个点最短时间是多少

 

思路:

我们倒着推 把最后一段当作一秒跑完的 并且把这个值设为当前速度

如果前面有一段不是当前速度的整数倍 就更新当前速度

 

题不是很难 但是坑点比较多

 

 1 #include<bits/stdc++.h>
 2 #define cl(a,b) memset(a,b,sizeof(a))
 3 #define debug(a) cerr<<#a<<"=="<<a<<endl
 4 using namespace std;
 5 typedef long long ll;
 6 typedef pair<int,int> pii;
 7 
 8 const int maxn=1e5+10;
 9 
10 int a[maxn];
11 
12 int main()
13 {
14     int T,cas=1;
15     scanf("%d",&T);
16     while(T--)
17     {
18         int n;
19         scanf("%d",&n);
20         a[0]=0;
21         for(int i=1;i<=n;i++)
22         {
23             scanf("%d",&a[i]);
24         }
25         ll ans=0; //第一个坑点就是ans会爆int 要用ll
26         double mx=a[n]-a[n-1];//第二个坑点就是要用double来记录最大速度
27         for(int i=n;i>=1;i--)
28         {
29             double dis=(a[i]-a[i-1])*1.0;
30             int t=dis/mx;
31             if(dis/t==mx)//这个也不算坑点 因为抓拍不是一秒一张 所以是整数倍就可以了
32             {
33                 ans+=t;
34             }
35             else
36             {
37                 ans+=(t+1);
38                 mx=dis/(t+1);
39             }
40         }
41         printf("Case #%d: %lld\n",cas++,ans);
42     }
43     return 0;
44 }/*
45 
46 1
47 3
48 6 11 21
49 
50 */

 

HDU 5935 Car

标签:deb   cas   一个人   err   size   个数   debug   题意   思路   

原文地址:http://www.cnblogs.com/general10/p/7359860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!