二分 + 贪心
题意翻译
输入n, 接着给你一个长度为n的字符串。 *
代表包装, P
代表人, .
代表为空, 人移动一单位距离需要花费一秒,人可以向左或者向右移动。人只要走到包装的位置,就会把包装吃掉,问你最少需要多少秒。所有的包装就被人全吃完
Inputs and Outputs examples
Inputs’ e.g. #1
1 | 7 |
Outputs e.g. #1
1 | 3 |
Inputs e.g. #2
1 | 10 |
Outputs e.g. #2
1 | 2 |
分析
ZR的mjy老师姐姐(姐姐敲可爱呢qwq)讲二分时候的例题.
我们考虑二分答案,二分人到达食物的最小时间$mid$,设人和食物的目标距离为$dis$,那么在遍历中可能有以下三种情况:
如果这个人前面的食物都已经被吃完,那么贪心往前遍历$mid$格
之前有没有被吃的食物,如果左边的食物距离较短,即$x > 3 \times dis$,那么先向左到达该目标,再向右移动
之前有没有被吃的食物,如果右边的食物距离较短,即$x \leq 3 \times dis$,那么先向右尽量走$i+\frac {x-mid}{2}$格,再向左到达该目标
后两种情况可以画图理解一下,具体细节可以康康代码
代码
1 | // luogu-judger-enable-o2 |