第三題 獨木橋(bridge.pas/c/cpp)
【問題描述】
戰爭已經進入到緊要時刻。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納乙個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩人將無法繞過對方,只能由乙個人回頭下橋,讓另乙個人先通過。但是,可以有多個人同時呆在同乙個位置。
突然,你收到從指揮部發來的資訊,敵軍的轟炸機正朝著你所在的獨木橋飛來!為了安全,你的部隊必須撤下獨木橋。獨木橋的長度為l,士兵們只能呆在座標為整數的位置,所有士兵的速度都為1,當乙個士兵某一時刻來到了座標為0或l+1的位置時,他就離開了獨木橋。
每個士兵都有乙個初始面對的方向,他們會以勻速朝著這個方向行走,中途不會自己改變方向。但是,如果兩個士兵面對面相遇,他們無法彼此通過對方,於是就分別轉身,繼續行走。轉身不需要任何時間。
由於先前的憤怒,你已不能控制你的士兵。甚至,你連每個士兵初始面對的方向都不知道。因此,你想要知道你的部隊最少需要多少時間就可能全部撤離獨木橋。另外,總部也在安排阻攔敵人的進攻,因此你還需要知道你的部隊最多需要多少時間才能全部撤離獨木橋。
【輸入檔案】
第一行:乙個整數l,表示獨木橋的長度。橋上的座標為1..l
第二行:乙個整數n,表示初始時留在橋上士兵的數目。
第三行:有n個整數,分別表示每個士兵的初始座標。初始時,沒有兩個士兵在同一座標。
【輸出檔案】只有一行,輸出兩個整數,分別表示部隊撤離獨木橋的最小時間和最大時間。兩個整數用乙個空格分開。
【樣例輸入】
1 3【樣例輸出】
2 4【資料規模及約定】
n≤l≤1000
兩個人如果碰撞後,轉向走,可以等效看作兩人繼續往前走。
要讓時間最大,就要讓每個人朝較遠的方向走,求所有人時間的最大值。
要讓時間最小,就要讓每個人朝較近的方向走,求所有人時間的最大值。
#include #include #define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
using std::sort;
long getint()
do rs=(rs<<3)+(rs<<1)+tmp-'0';
while (isdigit(tmp=getchar()));
return sgn?rs:-rs;
}long a[1010];
int main()
{ freopen("bridge.in","r",stdin);
freopen("bridge.out","w",stdout);
long l = getint();
long n = getint();
for (long i=1;i
貪心 獨木橋
p1007 題目背景 戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納1個人通過。假如有2個人相向而行在橋上相遇,...
獨木橋 貪心
戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納乙個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個人將無法繞...
貪心 洛谷 P1007 獨木橋
戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納乙個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個人將無妨繞...