L2-014 列车调度 (25分) set用法

题意:

if(当前编号>所有轨道上的最小编号)
{
    新增轨道并将该编号放入该轨道。
}
else
{
    把该编号放入最接近它的比他稍大一点的轨道中。
    (有同学可能会问为什么要放到最接近他的轨道,这是因为如果有这种情况出现
    {
        输入数据:8 4 2 5 3 9 1 6 
        在编号1进入之前按照伪代码每条轨道是这样过的情况:
        2 4 8
        3 5
        9
        如果将1放到最接近他的第一条轨道中,那么之后的6可以在不增加轨道的情况下放入第三条 
        轨  道,但如果要把1放入第三条轨道,那么就需要再增加一条轨道去放6,显然这样并不是
        最优解。
    })
}

由于该题只需输出轨道数,所以每个轨道上并不需要记录所有的编号,只需要记录最小的编号即可,所以可以用,通过set进行插入删除等操作,至于如何找寻距离编号最近的轨道,可以直接利用lower_bound()函数。
下面给出代码

 1 #include<iostream>
 2 #include<set>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     cin>>n;
 8     set<int>sc;
 9     for(int i=0;i<n;i++){
10         int k;
11         scanf("%d",&k);
12         set<int>::iterator it=sc.lower_bound(k);
13         if(it!=sc.end()){
14             sc.erase(it);
15             sc.insert(k);
16         }
17         else
18         sc.insert(k);
19     }
20     cout<<sc.size();
21 }

 

posted @ 2020-11-23 19:19  古比  阅读(100)  评论(0编辑  收藏  举报