题目描述
公园园区提供小火车单向通行,从园区站点编号最小到最大通行如1~2~3~4~1,然后供员工在各个办公园区穿梭,通过对公司N个员工调研统计到每个员工的坐车区间,包含前后站点,请设计一个程序计算出小火车在哪个园区站点时人数最多。
输入描述
第1个行,为调研员工人数
第2行开始,为每个员工的上车站点和下车站点。
使用数字代替每个园区用空格分割,如3 5表示从第3个园区上车,在第5个园区下车
输出描述
人数最多时的园区站点编号,最多人数相同时返回编号最小的园区站点
用例
输入 | 3 1 3 2 4 1 4 |
输出 | 2 |
说明 | 无 |
题目解析
问题描述
公园区域提供小火车单向通行,从园区站点编号最小到最大进行行驶,如1 -> 2 -> 3 -> 4 -> ... -> n -> 1。员工在各个园区站点上车和下车,需要计算小火车在每个站点时,乘客人数最多的站点编号。如果多个站点人数相同,则返回编号最小的那个站点。
输入描述
- 第一行:员工人数 NNN。
- 接下来 NNN 行:每行两个数字,表示员工的上车站点和下车站点。
输出描述
输出人数最多时的园区站点编号。如果有多个站点人数相同,返回编号最小的站点。
示例
输入:
3
1 3
2 4
1 4
输出:
2
解题思路
- 初始化站点计数:初始化一个数组来统计每个站点的乘客数量。
- 统计乘客数量:遍历每个员工的上车和下车站点,更新对应区间内的乘客数量。
- 找出乘客最多的站点:遍历站点计数数组,找出乘客数量最多的站点。
C++代码实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
vector<int> boardCount(N + 1, 0); // 记录每个站点的乘客数
vector<int> leaveCount(N + 1, 0); // 记录每个站点下车的乘客数
for (int i = 0; i < N; ++i) {
int board, leave;
cin >> board >> leave;
boardCount[board]++;
leaveCount[leave]++;
}
int maxPassengers = 0;
int currentPassengers = 0;
int resultStation = 1;
for (int i = 1; i <= N; ++i) {
currentPassengers += boardCount[i];
if (currentPassengers > maxPassengers) {
maxPassengers = currentPassengers;
resultStation = i;
}
currentPassengers -= leaveCount[i];
}
cout << resultStation << endl;
return 0;
}
代码说明
- 初始化计数数组:创建两个数组
boardCount
和leaveCount
来分别统计每个站点的上车和下车人数。 - 统计上车和下车人数:遍历每个员工的上车和下车站点,更新
boardCount
和leaveCount
数组。 - 计算乘客最多的站点:遍历所有站点,计算每个站点的当前乘客人数,找出乘客数量最多的站点并输出。
这个程序能够计算出小火车在每个站点时乘客人数最多的站点编号。如果有多个站点人数相同,返回编号最小的那个站点。