我太菜了没想到这个

首先,结论是:以首项为1, 公差为1的等差数列的前n项和满足Sn>x的最小n即为答案。

下面给出证明思路: 1.上述结论的做法是: 令m=满足条件的最小n, t = Sm - x, 则只需在t时刻停留即可保证最后一步恰好走到x。 2.上述结论的合理性: ①我们不可能折回,因为折回后如果直接返回,只能前进1,代价大于在t时刻停留的代价(可以根据等差数列理解,可以列方程严格证明),而停留后返回代价明显更大(停留需要很长时间,而折回后返回前进的距离远没有这么长)。 ②我们不可以停留太久,显然停留一次比停留多次代价小。

上述证明不严密,欢迎佬们补充。

因此,用一个while轻松解决。

AC Code(java)

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        long x = scanner.nextLong(), t = 0, i = 1;
        while(t < x){
            t += i;
            i ++;
        }
        System.out.println(i - 1); //懂得都懂
    }
}

你想的话也可以这么写

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        long x = scanner.nextLong(), t = 0, i = 1;
        while((t += i ++) < x) {}
        System.out.println(i - 1); //懂得都懂
    }
}

解毕。

另,bfs不知道为啥t了,有佬分享一下bfs的写法吗(

1 条评论

  • @ 2022-10-29 18:32:58

    我还以为直接找会t,大佬太强了

    • 1