C++题目描述某景区有一条长空栈道许多游客在栈道上欣赏风景。因为这条长空栈道十分狭窄只能容纳 1 个人通过。突然天象异变暴风雨正向景区袭来!为了安全所有游客必须撤下栈道。栈道的长度为 L游客们最开始呆在坐标为整数的地方。所有游客的速度都为 1一旦一个游客某一时刻来到了坐标为 0 或 L+1 的位置他就离开了栈道。每个游客都有一个初始面对的方向他们会以匀速朝着这个方向行走中途不会主动改变方向。但是如
解题思路:
- 首先,根据输入的栈道长度和游客数量,可以确定栈道上可以容纳游客的最大数量为栈道长度减去游客数量,即max_num = L - N。
- 然后,对于每个游客的初始坐标,可以计算出游客离栈道两端的最短距离,即min_distance = min(坐标, L-坐标+1)。
- 游客撤离栈道的最小时间为所有游客离栈道两端的最短距离中的最大值,即min_time = max(所有游客的最短距离)。
- 游客撤离栈道的最大时间为所有游客离栈道两端的最短距离中的最大值再加上栈道上可以容纳游客的最大数量,即max_time = min_time + max_num。
C++代码实现如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int L, N;
cin >> L >> N;
vector<int> positions(N);
for (int i = 0; i < N; i++) {
cin >> positions[i];
}
int max_num = L - N;
int min_time = 0;
for (int i = 0; i < N; i++) {
int min_distance = min(positions[i], L - positions[i] + 1);
min_time = max(min_time, min_distance);
}
int max_time = min_time + max_num;
cout << min_time << " " << max_time << endl;
return 0;
}
时间复杂度分析: 假设栈道的长度为L,游客数量为N,则计算最短时间的循环需要执行N次,计算最大时间的循环需要执行N次,因此总的时间复杂度为O(N)
原文地址: https://www.cveoy.top/t/topic/iauD 著作权归作者所有。请勿转载和采集!