火車站的列車排程鐵軌的結構如下圖所示。
figure
兩端分別是一條入口(entrance)軌道和一條出口(exit)軌道,它們之間有n條平行的軌道。每趟列車從入口可以選擇任意一條軌道進入,最後從出口離開。在圖中有9趟列車,在入口處按照的順序排隊等待進入。如果要求它們必須按序號遞減的順序從出口離開,則至少需要多少條平行鐵軌用於排程?
輸入格式:
輸入第一行給出乙個整數n (2 <= n <= 105),下一行給出從1到n的整數序號的乙個重排列。數字間以空格分隔。
輸出格式:
在一行中輸出可以將輸入的列車按序號遞減的順序調離所需要的最少的鐵軌條數。
輸入樣例:
9輸出樣例:8 4 2 5 3 9 1 6 7
4思路:因為要保證火車能按序號遞減出列,所以要保證每條軌道裡「序號大者優先」(即序號大的火車排在序號小的或者的前面)
如圖,按箭頭順序遍歷每乙個數,如果當前數大於任何一條軌道的末尾火車序號,則它只能「另起爐灶」,而如果不是,則找到第一條末尾火車序號大於等於它的軌道,將它放在這條軌道的最後。
ac**:
#include #include此題可用stl中的set(集合)代替上述a[100010],以對容器set的操作代替對陣列a的操作using
namespace
std;
int a[100010];//
用a[i]表示第i條軌道的末尾火車序號,則序列a必定是遞增的
intmain()
a[l]=tmp;}}
printf(
"%d\n
",len);//
最終序列a的長度就是最少所需軌道數
return0;
}
set容器中元素互不相同,其中元素自動按公升序排序
set的基本操作:
sets;//定義set容器s
s.clear();//清空s中所有元素
s.empty();//判斷s是否為空
s.size();//得到s的元素個數
s.insert(x);//向s中插入元素x
s.erase(it);//刪除s中迭代器it所指向元素
s.lower_bound(x);//查詢s中第乙個大於等於x的值,返回其迭代器
ac**:
#include #include#include
using
namespace
std;
sets;
intmain()}}
printf(
"%d\n
",s.size());
return0;
}
PTA 列車排程
火車站的列車排程鐵軌的結構如下圖所示。兩端分別是一條入口 entrance 軌道和一條出口 exit 軌道,它們之間有n條平行的軌道。每趟列車從入口可以選擇任意一條軌道進入,最後從出口離開。在圖中有9趟列車,在入口處按照的順序排隊等待進入。如果要求它們必須按序號遞減的順序從出口離開,則至少需要多少條...
PTA列車排程
火車站的列車排程鐵軌的結構如下圖所示。兩端分別是一條入口 entrance 軌道和一條出口 exit 軌道,它們之間有n條平行的軌道。每趟列車從入口可以選擇任意一條軌道進入,最後從出口離開。在圖中有9趟列車,在入口處按照的順序排隊等待進入。如果要求它們必須按序號遞減的順序從出口離開,則至少需要多少條...
列車排程(PTA)
7 11 列車排程 25 分 火車站的列車排程鐵軌的結構如下圖所示。兩端分別是一條入口 entrance 軌道和一條出口 exit 軌道,它們之間有n條平行的軌道。每趟列車從入口可以選擇任意一條軌道進入,最後從出口離開。在圖中有9趟列車,在入口處按照的順序排隊等待進入。如果要求它們必須按序號遞減的順...