題目背景 戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你計程車兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納一個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個 ...
題目背景
戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你計程車兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納一個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個人將無妨繞過對方,只能有一個人回頭下橋,讓另一個人先通過。但是,可以有多個人同時呆在同一個位置。
題目描述
突然,你收到從指揮部發來的信息,敵軍的轟炸機正朝著你所在的獨木橋飛來!為了安全,你的部隊必須撤下獨木橋。獨木橋的長度為L,士兵們只能呆在坐標為整數的地方。所有士兵的速度都為1,但一個士兵某一時刻來到了坐標為0或L+1的位置,他就離開了獨木橋。
每個士兵都有一個初始面對的方向,他們會以勻速朝著這個方向行走,中途不會自己改變方向。但是,如果兩個士兵面對面相遇,他們無法彼此通過對方,於是就分別轉身,繼續行走。轉身不需要任何的時間。
由於先前的憤怒,你已不能控制你計程車兵。甚至,你連每個士兵初始面對的方向都不知道。因此,你想要知道你的部隊最少需要多少時間就可能全部撤離獨木橋。另外,總部也在安排阻攔敵人的進攻,因此你還需要知道你的部隊最多需要多少時間才能全部撤離獨木橋。
輸入輸出格式
輸入格式:第一行:一個整數L,表示獨木橋的長度。橋上的坐標為1…L
第二行:一個整數N,表示初始時留在橋上計程車兵數目
第三行:有N個整數,分別表示每個士兵的初始坐標。
輸出格式:只有一行,輸出兩個整數,分別表示部隊撤離獨木橋的最小時間和最大時間。兩個整數由一個空格符分開。
輸入輸出樣例
輸入樣例#1:4 2 1 3輸出樣例#1:
2 4
說明
初始時,沒有兩個士兵同在一個坐標。
數據範圍N<=L<=1000。
對於每一個士兵轉向之後,我們可以看做兩個士兵交換身份之後繼續走
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 int read(int & n) 8 { 9 char c='.';int x=0,flag=0; 10 while(c<'0'||c>'9') 11 {c=getchar(); if(c=='-')flag=1; } 12 while(c>='0'&&c<='9') 13 {x=x*10+(c-48);c=getchar();} 14 if(flag==1)n=-x;else n=x; 15 } 16 const int MAXN=10001; 17 int a[MAXN]; 18 int n,l; 19 int minn,maxn; 20 int main() 21 { 22 read(l);read(n); 23 for(int i=1;i<=n;i++) 24 { 25 read(a[i]); 26 minn=max(minn,min(a[i],(l-a[i])+1)), 27 maxn=max(maxn,max(a[i],(l-a[i])+1)); 28 } 29 30 printf("%d %d",minn,maxn); 31 return 0; 32 }