L2-014. 列車調度【set】

題目:列車調度

思路:

如何能使軌道數最少?就是每次進入一個數字,看存在的軌道的是有沒有比當前值大的,大的話把當前值替換當前軌道即可,如果沒有就需新增軌道!

樣例:8 4 2 5 3 9 1 6 7

1 2 4 8

3 5

6 9

7

需用4個軌道即可按遞減輸出了!

所以按以上思路:輸入一個值,看當前所有軌道是否有大於前前值的,有的話替換當前軌道值,否則新增軌道

這裏需要用set集合實現,否則超時了。。。因爲set集合中有一個函數:lower_bound() 可以查出當前集合中有沒有比要查的值大的值,有的話直接返回此值,這樣我們就可以將此值刪除,然後將當前值加入集合,最後的集合長度即爲軌道數了!

參考:心向陽光2014博客

代碼:

#include <iostream>
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
set<int>s;
int main()
{
    int n,fig;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&fig);
        if(s.empty()) s.insert(fig);
        else{
            if(s.lower_bound(fig) != s.end()){//找到比當前輸入值大的值
                s.erase(s.lower_bound(fig));//將較大的那個值刪除
                s.insert(fig);//將當前值插入
            }else s.insert(fig);//新增軌道
        }
    }
    printf("%d\n",s.size());
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章