POJ 1852 Ants


題目大意:有n個螞蟻在一個桿長為d的桿上,他們的位置(以螞蟻和桿的最左端的距離為標准)依次是接下來的n個數。

任意的螞蟻爬行的時候,若兩個螞蟻相遇,那么他們按照各自的反方向爬行(螞蟻轉彎的時間忽略不計),若螞蟻爬到了最左(右)端,那么該螞蟻掉下來。

螞蟻最初選擇行走的方向不定,求所有螞蟻都掉下來的可能的最早時間和最晚時間。

分析:

該問題看起來復雜,其實不然,如果光想着兩只螞蟻相遇之后的情景,那就是很復雜了,我們可以換位思考,我們要求螞蟻都掉下來的時間,因為每個螞蟻對我們來說都是一樣的,所以就算兩個螞蟻相遇了,他們的本質對我們來說還是不變(相遇前一個向左爬行,一個向右爬行;相遇后還是一個向左爬行一個向右爬行)。

看出來這個問題,這題就沒有復雜可言了,顯然答案已經揭曉:

AnsMin= MAX{AnsMin, Min(a,b) }  (a,b代表每只螞蟻距離最左端和最右端的距離)

AnsMax=MAX{AnsMax,Max(a,b) }

好了,貼上代碼吧:

 1 #include<stdio.h>
 2 #define MAX(a,b) a>b ? a : b
 3 int main()
 4 {
 5     int N,d,n;
 6     scanf("%d",&N);
 7     for(int i=1;i<=N;i++){
 8         scanf("%d%d",&d,&n);
 9         int a,b,AnsMin=0,AnsMax=0;
10         while(n--){
11             scanf("%d",&a);
12             b=d-a;
13             if(a>b) a=b,b=d-a;
14             AnsMin=MAX(AnsMin,a);
15             AnsMax=MAX(AnsMax,b);
16         }
17         printf("%d %d\n",AnsMin,AnsMax);
18     }
19     return 0;
20 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM