题目链接:https://vjudge.net/problem/HDU-5935
题意:一辆车,从t=0开始走,速度只能递增,可为小数。警察在t为整数的时候记录了N个车的位置(整数),问到达最后一个位置时这辆车总共开了多久。
#include<bits/stdc++.h>
#define maxn 100010
#define ll long long
using namespace std;
int main()
{
int T;
scanf("%d",&T);
int cas=1;
while(T--)
{
int n;
ll a[maxn];
scanf("%d",&n);
a[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
ll ans=1;//由于会卡精度,所以用分数形式递推
ll fenzi=a[n]-a[n-1];//距离
ll fenmu=1;//时间
for(int i=n-1;i>=1;i--)
{
ll d=a[i]-a[i-1];
fenmu*=d;
swap(fenzi,fenmu);
ll t=fenzi/fenmu+1;
if(fenzi%fenmu==0)
t--;
ans+=t;
fenzi=d;
fenmu=t;
}
printf("Case #%d: %lld\n",cas++,ans);
}
}