算法设计与编程 独木桥 提醒:思维题

64 阅读1分钟

P1007 独木桥 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

模拟一下,这是初始状态:

image.png

在第一时刻,A士兵和B士兵同时向外挪一步:

image.png

A士兵已经撤离完成,B士兵还没有,因此B士兵还需要在第二时刻继续撤离:

image.png

A,B士兵撤离桥面最短用时2秒。

现在来模拟最长撤离时间:

复原:

image.png

在第一时刻,A,B士兵都向对面挪了一步: image.png

第二时刻:

image.png

第三时刻:

image.png

第四时刻(撤离完成):

image.png

因此最长撤离时间是4秒钟。

解题思路

在初始状态的时候,B出左端点的距离是3,A出右端点的距离是4,我们取一个最大值,就是最长撤离时间。

A出左端点的距离1,B出右端点的距离是2,我们仍然取一个最大值,是最小撤离时间。

两个撤离时间取一个较小值,就是最小撤离时间。A出左端点的距离1,B出右端点的距离是2,我们仍然取一个最大值,是最小撤离时间。

两个撤离时间取一个较小值,就是最小撤离时间。 image.png

我们求当前士兵x出左端点的距离可以通过下标直接求出,比如A士兵的下标是1,那么它出左端点只需要1步。

那A士兵出右端点需要多少步呢? 我们可以通过一个公式求出:l+1a[i]l+1-a[i]

验证:5-1=4步

我们在这两个步数谁小,士兵就靠近哪一端。例如A士兵就靠近左端。

image.png