藍橋杯 螞蟻感冒

2021-07-27 21:12:41 字數 1291 閱讀 9468

/*

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

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

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

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

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

【資料格式】

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

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

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

例如,輸入:

35 -2 8

程式應輸出:

1再例如,輸入:

5-10 8 -20 12 25

程式應輸出:

3剛開始我想多了,想的比較複雜,後來參考人家的部落格,才知道,兩隻螞蟻碰頭之後,相當於原來的螞蟻方向沒有改變,只是感冒的螞蟻數目增加了,最後螞蟻感冒的數目就可以得出了。

具體思路:

如果初始螞蟻在左邊, 

如果左邊的螞蟻都在向左走,速度都一樣是不會感冒的, 

如果左邊的螞蟻有向右走的,這些向右走的螞蟻都會感冒,然後這些螞蟻的會傳染所有右邊向左走的螞蟻,感冒的螞蟻就是這些求和 

如果初始螞蟻在右邊也是一樣的 

具體一下就是左邊向右走的螞蟻和右邊向左走的螞蟻都是會感冒的,最後再加上它自己

*/#include

#include

using namespace std;

struct node

;node a[100];

int cmp(node a1,node a2)

int main()

sort(a,a+n,cmp) ;

int temp=0,left=0,right=0,ans=0;

for(int i=0;i 

if(a[i].dis == 1)

left++;

}for (int i=temp+1;i 

if(a[temp].dis==1 && right==0 || a[temp].dis==-1 && left==0)

ans++;

else

ans=left+right+1;   

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

} return 0;

}

藍橋杯 螞蟻感冒

時間限制 1 sec 記憶體限制 128 mb 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你...

藍橋杯 螞蟻感冒

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

藍橋杯 螞蟻感冒

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