L2-014 列车调度

L2-014 列车调度

L2-014 列车调度 - 团体程序设计天梯赛-练习集 (pintia.cn)

题解

这道题要先分析清楚题目意思,以题目中的样例来分析调度列车的过程:

  • 第一趟列车是 8,此时没有已占用的平行轨道,所以为它新开一条轨道(相当于新建一个栈),把 8 放入这条轨道,此时轨道情况为:轨道 1:[8]

  • 第二趟列车是 4,它的序号 4 小于 8,可以放入有 8 的这条轨道(因为后续出栈时能满足递减顺序),将 8 替换为 4,轨道情况变为:轨道 1:[4]

  • 第三趟列车是 22 小于 4,同样可以放入这条轨道,将 4 替换为 2,轨道情况是:轨道 1:[2]

  • 第四趟列车是 5,此时 5 大于 2,不能放入当前这条轨道(否则无法保证按递减顺序出栈),所以需要新开一条轨道,把 5 放入新轨道,轨道情况变为:轨道 1:[2]轨道 2:[5]

  • 第五趟列车是 33 小于 5 且大于 2,所以可以放入有 5 的这条轨道,将 5 替换为 3,轨道情况为:轨道 1:[2]轨道 2:[3]

  • 第六趟列车是 99 大于 23,都不能放入现有的轨道,于是再新开一条轨道,把 9 放入,轨道情况是:轨道 1:[2]轨道 2:[3]轨道 3:[9]

  • 第七趟列车是 11 小于 2,放入有 2 的轨道,将 2 替换为 1,轨道情况变为:轨道 1:[1]轨道 2:[3]轨道 3:[9]

  • 第八趟列车是 66 大于 13 小于 9,放入有 9 的轨道,将 9 替换为 6,轨道情况是:轨道 1:[1]轨道 2:[3]轨道 3:[6]

  • 第九趟列车是 77 大于 136,不能放入现有的轨道,再新开一条轨道,把 7 放入,轨道情况为:轨道 1:[1]轨道 2:[3]轨道 3:[6]轨道 4:[7]

这道题分析清楚后很容易想到set集合,set集合的特性是不会出现重复的内容,并且会将存入的数据按顺序排列。在分析中,我们存入set集合中的颜色代表每一条轨道上列车编号最小的那个元素,存入set集合的个数就代表轨道的数量。

下面是代码中用到的set集合的一些方法。

end(); // 返回指向最后一个元素的后一个位置的迭代器

size(); // 返回集合中元素的数目

upper_bound(); // 返回大于某个值元素的迭代器

erase(); // 删除集合中的元素

insert(); // 在集合中插入元素

代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    set<int> s;
    int num;
    for(int i=0;i<n;i++){
        cin>>num;
        auto a=s.upper_bound(num);
        if(a!=s.end()){
            s.erase(a);
        }
        s.insert(num);
    }
    cout<<s.size();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值