歷屆試題 螞蟻感冒

2021-08-19 21:02:34 字數 1035 閱讀 3088

樣例輸入 3

5 -2 8

樣例輸出 1

樣例輸入 5

-10 8 -20 12 25

樣例輸出 3

一開始看到題目想的有點細導致反而讓題目變複雜的,採用模擬的方法的話,各種掉頭也是很難搞

看了網上一些大神的揭發啊發現,掉頭本職和穿行是一樣的,因為碰頭後兩隻螞蟻都感冒了,那掉頭和穿行的效果是一樣的

因此就會有碰到乙隻螞蟻後兩隻螞蟻開始往兩邊掃蕩,因此除特殊情況外(不會傳染別的螞蟻的情況)

最後感冒的螞蟻的數量 = 初代(第一只感冒的螞蟻)左邊向右走的螞蟻數 + 初代右邊向左走的螞蟻的數量

具體一點可以這樣想

首先,易知 

同方向的螞蟻由於速度相同的原因是不可能被傳染的(被追上)

然後考慮

乙隻螞蟻不管它是往左走還是往右走(排除特殊情況)都會和乙隻螞蟻碰頭,然後初代和第二代螞蟻就會向兩邊掃

因此,初代左邊向右走的螞蟻肯定會被初代或是第二代傳染,然後第三代的螞蟻可能傳染的螞蟻數已經在上面算進去了,畢竟已經有兩隻不同方向的螞蟻再掃蕩了。

而特殊的情況就只有兩種

1.初代向左走,而其左邊的螞蟻都往左走

2.初代向右走,而其右邊的螞蟻都向右走

這兩種情況包含了,初代左/右走,左/右邊沒螞蟻 和 所有螞蟻同方向走的幾中特殊情況

以下為ac**

#include#include#include#include#include#includeusing namespace std;

bool cmp(int a,int b)

}sort(v.begin(),v.end(),cmp);

int k = 0;

//找到排序後螞蟻的位置

for(int i = 0;i0)

} cout<<1;

return 0;

} return 0;

}

歷屆試題 螞蟻感冒

問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...

歷屆試題 螞蟻感冒

歷屆試題 螞蟻感冒 時間限制 1.0s 記憶體限制 256.0mb 問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,...

歷屆試題 螞蟻感冒

問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...