樣例輸入 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只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...