距离 CSP 2019 还有 4 天 17 小时 8 分钟 11 秒
10178. 「一本通 5.5 例 4」旅行问题

题意

John 打算驾驶一辆汽车周游一个环形公路。公路上总共有 $n$ 车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。John 必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。 任务:判断以每个车站为起点能否按条件成功周游一周。 可以输出TAK否则输出NIE

思路

先考虑顺时针 设$a_i$表示从$i$站到下一站,车内的汽油增加(减少)了多少。 设$sum_i$表示$a_i$的前缀和,那么如果要判断从某个车站出发是否能周游一周其实就是判断$sum_i-sum_{i-1},sum_{i+1}-sum_{i-1} \dots sum_{i+n-1}-sum_{i-1}$是否有负数,也就是$sum_i,sum_{i+1} \dots sum_{i+n-1}$ 的最小值减去$sum_{i-1}$是否为负数,我们知道,求最小值可以使用RMQ算法(当然线段树也可以),所以使用RMQ+ST表就可以做出顺时针是否可以绕一圈了。 至此,你已经得到了20分。 再考虑逆时针,与顺时针刚好相反。部分量需要变化。 比如逆时针判断
$sum_i,sum_{i+1} \dots sum_{i+n-1}$ 的最小值减去$sum_{i-1}$是否为负数时,如果为负数则代表$i+n-1$不行,而不是$i$。 逆时针的初始也要更新,与顺时针不同: 然后更新$sum$数组。
暂无评论

发送评论


				
上一篇
下一篇