HDU 5935 && 2016CCPC杭州 C: Car



这题题意好难懂:

有一辆速度只会越来越快的车,一开始速度为0,并且在坐标为0的点上,之后开始向右加速

中间会进行n次检查,第i次检查ci,表示在某个时间(刚好是整点)汽车刚好到了某个整点坐标上

求汽车从原点到第n个检查点花费的最短时间(速度可不为整)


倒过来处理就好了

这题难在卡精度

用分式表示小数才可以过

#include<stdio.h>
#define LL long long
LL a[100005];
LL Gcd(LL x, LL y)
{
	if(y==0)
		return x;
	return Gcd(y, x%y);
}
int main(void)
{
	LL T, n, i, p, q, ans, x, cas = 1;
	scanf("%lld", &T);
	while(T--)
	{
		scanf("%lld", &n);
		for(i=1;i<=n;i++)
			scanf("%lld", &a[i]);
		ans = 1;
		p = a[n]-a[n-1], q = 1;
		for(i=n-2;i>=0;i--)
		{
			x = (a[i+1]-a[i])*q/p;
			while(p*x<(a[i+1]-a[i])*q)
				x++;
			ans += x;
			q = x, p = a[i+1]-a[i];
			x = Gcd(p, q);
			p /= x, q /= x;
		}
		printf("Case #%lld: %lld\n", cas++, ans);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值