c++写:题目描述: 小A是一个美食爱好者。市里新开了一家美食街,这当然是小A不能错过的盛宴啦。 美食街是一条笔直的直线,在街道的不同的点上,有着不同种类的美食,第i个美食店的位置为xi,美食品种编号为pi。 这么多种美食让小A眼花缭乱,小A想要品尝所有品种的美食,又想走最少的路。 请编程帮助小A计算,他品尝所有品种的美食,要走的最短路程有多长? 输入 第1行有一个整数N,表示街道上美食店的总数量; 接下来N行,每行有2个整数xi和pi,分别代表了不同美食店的位置,以及这个美食店的美食品种。 测试数据保证同一个位置xi,只会开一家美食店。 输出 输出一个整数,代表小A要走的最短路程; 路程的计算方式为:如果从xi点到xj(xi≤xj)包含了所有品种的美食,那么路程长度=|xi−xj|。 样例 输入复制 7 2 2 1 3 5 2 4 1 6 3 10 2 8 1 输出复制 2 说明 【样例解释】 样例中xi可选取区间[4,6],可以包含所有的美食品种。 【数据范围】 对于20%的数据,10≤n≤20; 对于另外40%的数据,10≤n≤1000; 对于100%的数据,1≤n≤50000,1≤xi,pi≤109;
时间: 2024-04-18 18:23:51 浏览: 111
C++寻求最短最长路
```cpp
#include <iostream>
#include <vector>
#include <map>
<algorithm>
using namespace std;
int main() {
int N;
cin >> N;
// 使用map来记录每种美食的最后一个位置
map<int, int> lastPosition;
for (int i = 0; i < N; i++) {
int xi, pi;
cin >> xi >> pi;
lastPosition[pi] = xi; // 更新美食品种pi的最后一个位置
}
// 找到最小的位置差
int minDistance = INT_MAX;
int prevPosition = 0; // 上一个位置
for (auto it = lastPosition.begin(); it != lastPosition.end(); it++) {
int currentPosition = it->second;
// 计算当前位置与上一个位置之间的距离
int distance = currentPosition - prevPosition;
minDistance = min(minDistance, distance);
prevPosition = currentPosition; // 更新上一个位置
}
cout << minDistance << endl;
return 0;
}
```
这个程序首先读取输入的美食店数量N,然后使用map数据结构来记录每种美食的最后一个位置。接下来,遍历输入的每个美食店,更新每种美食的最后一个位置。
然后,通过遍历map,计算相邻两个美食品种的位置差,找到最小的位置差,即为小A要走的最短路程。
最后,输出最短路程。
阅读全文