hdu 5935 Car

来源:互联网 发布:linux常用命令grep 编辑:程序博客网 时间:2024/06/05 19:05

http://acm.hdu.edu.cn/showproblem.php?pid=5935




给出一段上升的序列为每个点的位置,要求从0开始跑到最后一个点,并且每一段路的速度必须是非递减的,并且所花的时间需要是整数,但是速度可以是小数。
按照题意,这道题仍然是贪心题,因为速度是非递减的,所以可以得到一个结论,就是最后一段路的速度越大,前面的整体的平均速度就应该越大,那么最后一段路速度最大即只花1s就跑完,那么就可以从后往前面去推。但是这题因为速度可以为小数,所以为了精度准确,需要用分子和分母来表示速度。



#include<bits/stdc++.h> using namespace std;long long int a[111111];long long int b[111111];int main(){   int T;   cin>>T;   int cs=1;   while(T--)   {   int n;   cin>>n;   cin>>a[1];   b[1]=a[1];   int i;   for(i=2;i<=n;i++)   {   scanf("%lld",&a[i]);   b[i]=a[i]-a[i-1];}long long int  v1=b[n];long long int  v2=1;long long int ans=1;for(i=n-1;i>=1;i--){         v2*=b[i];          long long int t=v1;        v1=v2;        v2=t;         long long int zs=v1/v2+1;          if(v1%v2==0)zs--;        ans+=zs;          v1=b[i];          v2=zs;      }    cout<<"Case #"<<cs++<<": "<<ans<<endl;   }   return 0; }


原创粉丝点击