首页 > 其他 > 详细

【JZOJ 4303】爬山

时间:2020-08-10 19:39:31      阅读:52      评论:0      收藏:0      [点我收藏+]

题目大意:

初始点在 \(A\)\(n\) 个单位时间后在 \(B\),一个单位时间可上下不超过 \(d\),问这过程中最高可达多少米。

正文:

方法一:

思路:

可以先跳到够的着 \(B\) 的位置,再将时间分成两份,一份去够最高点,一份从最高点回 \(B\)

代码:

int main()
{
	scanf("%lld %lld %lld %lld",&n,&d,&a,&b);
	n--;
	if (abs(a - b) % d != 0)
	{
		m = abs(a - b) / d + 1;
		n -= m;
		if (n % 2 == 1)
		{
			printf("%lld", min(a, b) + m * d + n / 2 * d);
		}
		else
		{
			printf("%lld", max(a, b) + n / 2 * d);
		}
	}
	else
	{
		printf("%lld", max(a, b) + (n - abs(a - b) / d) / 2 * d);
	}
	return 0;
}

思路二:

二分最高点。

【JZOJ 4303】爬山

原文:https://www.cnblogs.com/GJY-JURUO/p/13471162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!