題意:
一根長度為len的木棍上有n只螞蟻,螞蟻們都以1cm/s的速度爬行;如果一只螞蟻爬到了木棍的端點,那麼他就會掉下去;如果兩只螞蟻碰到一起了,他們就會掉頭往相反方向爬行。輸入len和n只螞蟻的初始位置(以左端點為原點),問:所有螞蟻都掉下木棍的最短時間和最長時間(螞蟻初始爬行方向是不定的)。
思路:
最短時間是很顯然的,只要靠近左端點的螞蟻都往左端點爬,靠近右端點的螞蟻都往右端點爬,時間就能最短;最短時間是所有螞蟻離他較近端點距離的最大值。
對於最長時間我實在是沒想到,後面看樣例的時候發現最長時間都是螞蟻距離端點長的最大值,然後按照這個思路
寫了代碼,然後就過了。。。。。。。
後面看了別人的思路才知道因為螞蟻的速率是恆定的,所以碰頭轉向完全可以不考慮(假設A,B碰頭轉向了,我只需把B看成A,A看成B就可以當他們沒有掉過頭了);這樣的話,問題就變成求螞蟻距離端點長度的最大值了,所以我上面的思路就是對的了。
其實如果考慮轉向的話,也可以列出1,2,3只螞蟻的情況進行一下觀察,然後也可以得到規律了。
代碼如下:
#include#include #include #include using namespace std; int a[1100000]; int main() { int i,j,t,len,n,min1,max1; scanf("%d",&t); while(t--) { scanf("%d%d",&len,&n); for(i=0;i