洛谷---P1007 獨木橋---貪心(一道有意思的題)

題目背景

戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因爲這座獨木橋十分狹窄,只能容納111個人通過。假如有222個人相向而行在橋上相遇,那麼他們222個人將無妨繞過對方,只能有111個人回頭下橋,讓另一個人先通過。但是,可以有多個人同時呆在同一個位置。

題目描述

突然,你收到從指揮部發來的信息,敵軍的轟炸機正朝着你所在的獨木橋飛來!爲了安全,你的部隊必須撤下獨木橋。獨木橋的長度爲LLL,士兵們只能呆在座標爲整數的地方。所有士兵的速度都爲111,但一個士兵某一時刻來到了座標爲000L+1L+1L+1的位置,他就離開了獨木橋。

每個士兵都有一個初始面對的方向,他們會以勻速朝着這個方向行走,中途不會自己改變方向。但是,如果兩個士兵面對面相遇,他們無法彼此通過對方,於是就分別轉身,繼續行走。轉身不需要任何的時間。

由於先前的憤怒,你已不能控制你的士兵。甚至,你連每個士兵初始面對的方向都不知道。因此,你想要知道你的部隊最少需要多少時間就可能全部撤離獨木橋。另外,總部也在安排阻攔敵人的進攻,因此你還需要知道你的部隊最多需要多少時間才能全部撤離獨木橋。

輸入格式

第一行:一個整數LLL,表示獨木橋的長度。橋上的座標爲111LLL

第二行:一個整數NNN,表示初始時留在橋上的士兵數目

第三行:有NNN個整數,分別表示每個士兵的初始座標。

輸出格式

只有一行,輸出222個整數,分別表示部隊撤離獨木橋的最小時間和最大時間。222個整數由一個空格符分開。

輸入輸出樣例

輸入 #1
4
2
1 3
輸出 #1
2 4

說明/提示

初始時,沒有兩個士兵同在一個座標。

數據範圍N≤L≤5000N \le L \le 5000NL5000

思路

  看來別人的題解,得到的感悟。每兩個人,碰面時,兩人反向而走,和兩人碰面繼續向前走是一樣的時間,那麼見微知著,所有人都是一樣的道理,所以變成了對每個人分析最短和最長的時間便可以了。

實現代碼

#include<iostream>
#include<algorithm>
using namespace std;

int n, l, p, q, maxv, minv;

int main() { 
	cin >> l >> n;
	for (int i = 1; i <= n; i++) {
		cin >> p;
		q = l + 1 - p;
		if (p > q) swap(p, q);
		minv = max(p, minv);
		maxv = max(q, maxv);
	}
	cout << minv << " " << maxv << endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章