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 }