2024华为OD试题及答案-A030-人数最多的站点

题目描述

公园园区提供小火车单向通行,从园区站点编号最小到最大通行如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。员工在各个园区站点上车和下车,需要计算小火车在每个站点时,乘客人数最多的站点编号。如果多个站点人数相同,则返回编号最小的那个站点。

输入描述

  1. 第一行:员工人数 NNN。
  2. 接下来 NNN 行:每行两个数字,表示员工的上车站点和下车站点。

输出描述

输出人数最多时的园区站点编号。如果有多个站点人数相同,返回编号最小的站点。

示例

输入:

3
1 3
2 4
1 4

输出:

2

解题思路

  1. 初始化站点计数:初始化一个数组来统计每个站点的乘客数量。
  2. 统计乘客数量:遍历每个员工的上车和下车站点,更新对应区间内的乘客数量。
  3. 找出乘客最多的站点:遍历站点计数数组,找出乘客数量最多的站点。

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;
}

代码说明

  1. 初始化计数数组:创建两个数组boardCountleaveCount来分别统计每个站点的上车和下车人数。
  2. 统计上车和下车人数:遍历每个员工的上车和下车站点,更新boardCountleaveCount数组。
  3. 计算乘客最多的站点:遍历所有站点,计算每个站点的当前乘客人数,找出乘客数量最多的站点并输出。

这个程序能够计算出小火车在每个站点时乘客人数最多的站点编号。如果有多个站点人数相同,返回编号最小的那个站点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值