2023年藍橋杯預賽第八題螞蟻感冒

2021-10-02 12:41:02 字數 1022 閱讀 6355

【資料格式】

第一行輸入乙個整數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

解題思路:一開始我想模擬爬行移動的過程,但是有點複雜,其實不一定無時不刻的要改變螞蟻的位置也可以解決問題。

首先,能爬出桿子的螞蟻一定的左邊沒有螞蟻並且頭向左 或 右邊沒有螞蟻頭向右,只有滿足這兩種情況之一的螞蟻才能出去,所以每次判斷兩端螞蟻是否又滿足條件的,有就直接出去,不用一步步爬。還有就是感冒傳染的過程,只有兩個螞蟻頭朝向相對,並且其中乙隻螞蟻感冒了,才滿足傳染條件,用乙個變數標記起來。

#include#include#includeusing namespace std;

struct nodearr[105];

int n, outnum = 0, coldnum = 1;

bool cmp(node a, node b)

void find_left(int pos)else

} }}void find_right(int pos)else

} }}int main()

arr[0].is_cold = 1;

sort(arr, arr+n, cmp); //輸入的資料無序,排序成從左到右桿子上螞蟻位置的情況

while(outnum != n)else

} }cout << coldnum;

return 0;

}

藍橋杯2014 螞蟻感冒

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

藍橋杯預賽題 1

美國數學家維納 n.wiener 智力早熟,11歲就上了大學。他曾在1935 1936年應邀來中國清華大學講學。一次,他參加某個重要會議,年輕的臉孔引人注目。於是有人詢問他的年齡,他回答說 我年齡的立方是個4位數。我年齡的4次方是個6位數。這10個數字正好包含了從0到9這10個數字,每個都 恰好出現...

藍橋杯2023年C B組 8 螞蟻感冒

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