藍橋杯 螞蟻感冒

2021-09-11 20:20:37 字數 1801 閱讀 2540

長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資源約定:

峰值記憶體消耗 < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

首先分析一下這道題,把題目中給的兩種情況在紙上畫個簡單的座標軸。就會發現題目一共可以分為兩種情況

(把每乙個輸入都分解為方向和距離兩個數字 -1代表頭往左 1代表頭往右 距離是每個輸入的絕對值)

1、如果感冒的螞蟻的朝向為右:

i:方向相反,距離更大的螞蟻都會被感染。

ii:如果存在i種情況的螞蟻,那麼,方向相同距離更小的螞蟻都會被感染。

2、如果感冒的螞蟻的朝向為左:

i:方向相反,距離更小的螞蟻都會被感染。

ii:如果存在i種情況的螞蟻,那麼,方向相同距離更大的螞蟻都會被感染。

最後再加上感冒的螞蟻自己就是最後的總感染螞蟻數量了。

**很簡單:

#include

using namespace std;

struct ant

;int

main()

else

}int now_dic;

//儲存感冒螞蟻的方向

int now_dis;

//儲存感冒螞蟻的距離

now_dic = ants[0]

.direction;

now_dis = ants[0]

.distance;

int flag=

0,count=0;

//flag用於標記是否存在情況i

//方向朝左和朝右是差不多的,只要改一下正負號和大於小於號的方向即可

if(now_dic==1)

}}for(

int i=

1;i}}}if

(now_dic==-1

)}}for

(int i=

1;i}}

} cout

}

藍橋杯 螞蟻感冒

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

藍橋杯 螞蟻感冒

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

藍橋杯 螞蟻感冒

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