- FJNU·ACM-22级新手村の第四场世纪大战
带佐的回家路 - 不用二分
- 2022-10-29 15:33:25 @
我太菜了没想到这个
首先,结论是:以首项为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 条评论
-
Kepy 杰尼龟 LV 6 MOD @ 2022-10-29 18:32:58
我还以为直接找会t,大佬太强了
- 1