德黑兰市是伊朗国家图书馆的所在地。这个图书馆的镇馆之宝位于一个长长的大厅内,大厅里有排成一行的
图书管理员 Aryan 要完成这项工作。他创建了一个长度为
Aryan 从桌子
- 如果他手上没有书,而他所在的桌子上恰好有一本书时,他可以拿起这本书。
- 如果他手上有一本书,而他所在的桌子上恰好有另一本书时,他可以把手上的书和桌子上的书进行交换。
- 如果他手上有一本书,而他所在的桌子上没有书时,他可以把手上的书放到这个桌子上。
- 他可以走到任何一张桌子前。当他进行这个操作时,他手上可以拿一本书。
对于所有
实现细节
本题只支持C++。
你需要实现下面的函数:
long long minimum_walk(std::vector<int> p, int s)
该函数要返回 Aryan 重排好所有古书所需走过的总距离的最小值(以米为单位)。
例子
评测程序调用 minimum_walk([0, 2, 3, 1], 0)
。
在这个例子中,
- 走到桌子
处并且拿起桌上的书。这本书应该要被放到桌子 上。 - 然后,他走到桌子
处,并且把他手上的书和桌子上的书进行交换。现在他新拿到手上的书应该被放到桌子 上。 - 然后,他走到桌子
处,并且把他手上的书和桌子上的书进行交换。现在他新拿到手上的书应该被放到桌子 上。 - 然后,他走到桌子
处,并且把他手上的书放到桌子上。 - 最后,他回到桌子
处。 注意,桌子 上的书已经在正确的位置,即桌子 上,因此 Aryan 不需要把它拿起来。在这个方案中,他的总行走距离是 米。这是一个最优解;因此,函数应该返回 。
数据范围
- 数组
包含 个从 到 (含)的不同整数。
子任务编号 | 分值 | ||
---|---|---|---|
时间限制:
空间限制:
评分程序样例
评分程序样例将读入下述格式的输入数据:
- 第
行: - 第
行:
评分程序样例将输出一行,其中包括 minimum_walk
的返回值。