試題 歷屆試題
prev-27 螞蟻感冒
問題描述 :
長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺/秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了感冒。
輸入格式 :
第一行輸入乙個整數n (1 < n < 50), 表示螞蟻的總數。
接著的一行是n個用空格分開的整數 xi (-100 < xi < 100), xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,資料中不會出現0值,也不會出現兩隻螞蟻占用同一位置。其中,第乙個資料代表的螞蟻感冒了。
**輸出格式 : **
要求輸出1個整數,表示最後感冒螞蟻的數目。
樣例輸入 :
35 -2 8
樣例輸出 :
樣例輸入 :
5-10 8 -20 12 25
樣例輸出 :
思路:
乍一看是有點像模擬題的,但是仔細想想就能知道,題目說的螞蟻碰面的時候會朝著相反的方向爬行完完全全就是乙個坑,這和還朝著原方向前行基本上沒區別,而且就算是傳染感冒也是兩個螞蟻都感染,那麼我們就可以照著這個方向去推導
上圖是對題目的兩個例子所作出的**,我們可以看到畫著箭頭標記的就是第乙個感冒的,我們很明顯就可以看出,首先第乙個例子那個感冒的螞蟻並不會接觸到其他的螞蟻,所以感染者只有乙個,而第二個就不一樣了,感冒螞蟻首先接觸到了8號,然後由爬行過程中又接觸到了-20,所以第二個例子就有3個感染者,這時候我們可以發現,被感染的螞蟻都有乙個共同點,乙個是相對爬動的絕對位置比病原體小的,然後就是與病原體相同方向但是絕對位置比病原體大的,同理可以去實驗一下正向爬動的螞蟻,那我們就可以做乙個假設,所有的比病原體絕對位置小的正向爬動螞蟻都會被感染, 所有的比病原體絕對位置大的反向爬動螞蟻都會被感染 ,當然這也得取決於當前螞蟻爬動方向,如果爬動方向的人都不會被感染,那麼反方向的也自然不會。所以結果就出來了。
**:
#include#includeusing namespace std;
struct ma;
bool cmp(ma q,ma p)
if(i==0)
} sort(m,m+num,cmp);
int num1=0,num2=0;
for(int i=0;ia&&m[i].be==1)
} if(b==1)else
cout<
return 0;
}
藍橋杯 PREV 27 螞蟻感冒 模擬
歷屆試題 螞蟻感冒 時間限制 1.0s 記憶體限制 256.0mb 問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,...
藍橋杯 PREV 27 螞蟻感冒 模擬
歷屆試題 螞蟻感冒 時間限制 1.0s 記憶體限制 256.0mb 問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,...
藍橋學習 PREV 24
試題 歷屆試題 prev 24 郵局 問題描述 c村住著n戶村民,由於交通閉塞,c村的村民只能通過信件與外界交流。為了方便村民們發信,c村打算在c村建設k個郵局,這樣每戶村民可以去離自己家最近的郵局發信。現在給出了m個備選的郵局,請從中選出k個來,使得村民到自己家最近的郵局的距離和最小。其中兩點之間...