HDU 螞蟻感冒

2021-07-10 06:39:47 字數 1199 閱讀 8030

長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。 

每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺/秒。

當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。

這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。

請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了感冒。

【資料格式】

第一行輸入乙個整數n (1 < n < 50), 表示螞蟻的總數。

接著的一行是n個用空格分開的整數 xi (-100 < xi < 100), xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,資料中不會出現0值,也不會出現兩隻螞蟻占用同一位置。其中,第乙個資料代表的螞蟻感冒了。

要求輸出1個整數,表示最後感冒螞蟻的數目。

例如,輸入:

3 5 -2 8

程式應輸出:

1再例如,輸入:

5 -10 8 -20 12 25

程式應輸出:

3【分析】

題目其實不難,雖然說螞蟻碰面後會掉頭,但是完全可以理解為互相穿行而過,這樣題目將會大大簡化。

我們只要找出兩隻螞蟻ant1,和ant2。

ant1代表感冒的,向右走的螞蟻。

ant2代表感冒的,向左走的螞蟻。

這時候答案就明顯了。只要在ant1右邊並且向左走的螞蟻,一定會感冒。

同理,只要在ant2左邊,並且向右走的螞蟻,也一定會感冒。

#include

#include

#include

int cmp(const

void *p1, const

void *p2)

int main()

else

if(ant1<0 && arr[i]<-ant1)}}

if(ant1 < 0)

for(int i=0; iif(ant1 && -arr[i]>ant1)

count ++;

if(ant2 && arr[i]>0 && abs(arr[i])count ++;

}if(ant1 && ant2)

count --;

printf("%d\n",count);

return

0;}

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

螞蟻感冒(思維)

x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如下圖所示的網路。1 2 3 1 是允許的 1 2 1 ...