《挑戰程序競賽》1.6.2 Ants poj1852
阿新 • • 發佈:2017-06-03
通過 最短時間 程序競賽 要求 span str 速度 計算 ont 後一只到端點的螞蟻的時間即可,時間亦最長。
題意:n只螞蟻以每秒1cm的速度在長為Lcm的竿子上爬行。當螞蟻爬到竿子的端點時就會掉落。由於竿子太細,兩只螞蟻相遇時,它們不能交錯通過,只能各自反向爬回去。對於每只螞蟻,我們知道它距離竿子左端的距離xi,但不知道它當前的朝向。請計算所有螞蟻落下竿子所需的最短時間和最長時間。
解法:(1)對於最短時間,所有螞蟻都朝向較近的端點走時時間最短,因為這種情況下不會發生兩只螞蟻相遇的情況,所以只要求出這種情況下最後一只到端點的螞蟻的時間即可,時間亦最短。
(2)對於最長時間,如果不考慮螞蟻的實際體長等外在因素,兩只螞蟻相遇掉頭的情況可視為保持原樣交錯而過,即每只螞蟻要走當前位置到竿子端點的最大距離,所以只要求出這種情況下最
code:
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 #define maxn 100000 6 int l; 7 int n; 8 void func(int a[]){ 9 int mint = 0; 10 int maxt = 0; 11 12 for(int i=0; i<n; i++) 13 { 14 mint = max(mint, min(a[i], l-a[i]));15 } 16 17 for(int j = 0; j< n; j++) 18 { 19 maxt = max(maxt, max(a[j], l-a[j])); 20 } 21 22 cout<<mint<<" "<<maxt<<endl; 23 } 24 25 int main() 26 { 27 int m; 28 int a[maxn]; 29 cin >> m; 30 while(m --) 31 { 32 cin>>l>>n;33 for(int i=0; i<n; i++) 34 cin>>a[i]; 35 func(a); 36 } 37 return 0; 38 }
《挑戰程序競賽》1.6.2 Ants poj1852