Go Home
Go Home
(https://www.luogu.com.cn/problem/AT_arc070_a)
比较需要理解题意的一个题目
看看题目解析:在0秒的时候有一只袋鼠在左右无限长的数轴上的原点上。在i-1到i的时间内,袋鼠可以选择不动,也可以向任意方向跳i个单位长度。也就是说,如果袋鼠在坐标x,时间i-1到i的时候,可以存在x-i,x,x+i三点之中。袋鼠的家在坐标X。袋鼠想尽快移动到它家。求袋鼠到达家的时间的最小值。
首先,我们能懂时间是一直增的,也就是满足从1 - t的。那么在t秒内我们能走的路程就应是\({(1+t)*t\over 2}\)那么多。那么问题来了,如果刚好是满足这个等式的还好,直接输出t就好,但是如果出现一些离谱的,比如19之类的我们该怎么找?
我们再看看题目,袋鼠是可以停下来或者往回跳的那么操作性就很大了。我们再换换思路,有没有可能当出现这种***钻的数字的时候只要满足\({(1+t)*t\over 2}\) > x该t就答案呢(因为袋鼠是可以停下来的,只要满足它在某个时刻不跳了,用后边的时间加上,能 = x那么答案就出来了)
写个代码看看在t秒内,能跳的范围是多少
code
int t;cin >> t;
for (int i = t; i >= 0; i--) {
int ans = 0;
for (int j = 1; j <= t; j++) {
if(j == i)continue;
else ans+= j;
}
cout << ans << ' ';
}
当 t == 6 的时候答案是15 16 17 18 19 20 21
那就说明这答案就是当\({(1+t)*t\over 2}\) > x 的时候的t
Acode
int step = 0;
int i = 1;
while (1) {
step += i;
if(step >= x){
cout << i << endl;
return 0;
}
i++;
}