B4239 [海淀区小学组 2025] 拜访朋友
欢迎报名洛谷网校,期待和大家一起进步!
本题考察贪心。
首先特判特殊情况,当
陶陶拜访好朋友的移动轨迹一定是形如这两根黄色曲线,即:先走到一端再调头,拜访初始位置另外一侧的住所。因此,这里会出现两种情况,需要分类讨论。
假设一开始是向右走的,那么又会有两种情况。第一种情况是选择拜访
一开始向左走的情况也同理,也需要分成两种情况进行分类讨论。最后取得距离最短值即可。这一部分的参考代码如下:
long long ans1 = min(abs(x[n] - x0) + abs(x[n] - x[2]),
abs(x[n - 1] - x0) + abs(x[n - 1] - x[1])); // 一开始向右走
long long ans2 = min(abs(x[1] - x0) + abs(x[1] - x[n - 1]),
abs(x[2] - x0) + abs(x[n] - x[2])); // 一开始向左走
cout << min(ans1, ans2) << endl;