時間限制: 1 sec 記憶體限制: 128 mb
提交: 71 解決: 28
[提交][狀態][討論版]
長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
13
1/*兩隻螞蟻相撞同時掉頭可以看作穿過,第一只螞蟻不管方向朝哪個方向,
2它右邊的螞蟻只要向左走就可能碰撞感染(特殊情況除外),它左邊的
3螞蟻只要朝右邊走也可能被感染,可以得出公式
4num = 左邊螞蟻向右走的數量+右邊螞蟻向左走的數量+第一只螞蟻本身
5特殊情況:
61.當第一只螞蟻向左走的時候如果第一只螞蟻左邊沒有向右爬行的螞蟻,
7那麼不管第一只螞蟻右邊有多少向左爬行的,因爬行的速度相同則右邊的螞蟻永遠不可能被感染
82.當第一只螞蟻向右走的時候,如果第一只螞蟻右邊沒有向左爬行的螞蟻,
9那麼同樣第一只螞蟻左邊也永遠不可能感染
*/10 #include11
12using
namespace
std;
1314
int position[51];//
記錄每乙個螞蟻的初始位置
15int direction[51];//
0表示向左,1表示向右
1617
intmain()
27else31}
32int p=position[1
];33
int d=direction[1
];34
if(d==1)
41//
左邊往右爬
42else
if(position[i]1)45
}46if(drnum==0
)50 cout<1
<5152}53
else
if(d==0)
60//
左邊往右爬
61else
if(position[i]1)64
}65if(dlnum==0
)69 cout<1
<7172}73
return0;
74 }
HDU 螞蟻感冒
長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了...
2014 螞蟻感冒
include include includeusing namespace std struct node node a 100 int comp node a1,node a2 int main sort a,a n,comp 按照螞蟻離開桿子左邊端點的距離從小到大排序 int tmp 0,le...
螞蟻感冒 C C
長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了...