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++;
    }
posted @ 2023-01-18 00:38  TFOREVERY  阅读(162)  评论(0编辑  收藏  举报