【贪心】HDU6227 - Rabbits

题意

一条数轴上有若干只兔子。每只兔子处在不同的点上。在外围(两端)的兔子可以跳到任意其他两个兔子之间。求最多能跳多少步。注意:任何时候都不可能存在两只兔子在一个点上。

思路

WA了四发才A。。。自己还是太渣了。画出数轴跳了几下(雾)之后,发现只要前面的兔子跳到下一个兔子的下一个相邻位置,就可以保证第2个兔子之后的空点全部可以跳到。如图所示。

图中实心黑点代表数轴中的点,空心蓝圈代表兔子的初始位置,黑色箭头代表第一阶段跳,粉色箭头代表第二阶段跳。

由此可以看出,第一阶段跳了一次之后,就有三个兔子连在了一起。之后头部的兔子就可以跳到下一个空点,以此类推。这样,第二个兔子以后的所有点都可以跳到。直接统计出第二个兔子之后有多少个空点即可。

但是,这并不是最终答案。我也因为这个WA了好几发。请看下图。

答案是3?显然不对。这时,从尾部向前跳能得到更大的结果,最终结果为6。

综上所述,先正向建立数轴,统计出第二个兔子之后有多少空点。再反向建立数轴,做同样的事情。最后取这两个值的最大值,就是答案。

代码

#include <cstdio>

int A[505];

int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		int N;
		scanf("%d", &N);
		int ans1 = 0, ans2 = 0;
		for (int i=0; i<N; i++) {
			scanf("%d", &A[i]);
		}
		for (int i=2; i<N; i++) {
			ans1 += A[i]-A[i-1]-1;
		}
		for (int i=N-3; i>=0; i--) {
			ans2 += A[i+1]-A[i]-1;
		}
		printf("%d\n", ans1 > ans2 ? ans1 : ans2);
	}
	
	return 0;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值