藍橋杯 歷屆試題 螞蟻感冒

2021-09-03 00:07:10 字數 1459 閱讀 9446

長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

程式應輸出:

1程式應輸出:

3

資源約定:

峰值記憶體消耗 < 256m

cpu消耗  < 1000ms

藍橋杯分析:

思維題兩個螞蟻相碰相當於穿過

所以不管第乙個感冒的螞蟻是向左還是向右

只要統計一下

第乙個感冒的螞蟻的左邊向右走的+第乙個感冒的螞蟻的右邊向左走的

code:

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;#define inf 99999999

#define me(a,x) memset(a,x,sizeof(a))

int mon1[13]= ;

int mon2[13]= ;

int dir[4][2]= ,,,};

ll getval()

void

out(int

a)#define max_v 55

inta[max_v];

bool cmp(int x,int

y)int

main()

}int ans=0

;

for(int i=0;i)

for(int i=k+1;i)

cout

<1

<}}/*

思維題兩個螞蟻相碰相當於穿過

所以不管第乙個感冒的螞蟻是向左還是向右

只要統計一下

第乙個感冒的螞蟻的左邊向右走的+第乙個感冒的螞蟻的右邊向左走的

*/

藍橋杯 歷屆試題 螞蟻感冒

分析 1 因為只計算數量,所以螞蟻是掉頭還是直接向前走對本題沒有影響 2 如果感冒的螞蟻方向向左 在它左邊的螞蟻 如果向右,則會感染 如果向左則不會感染 在它右邊的螞蟻 如果向右,則不會感染 如果向左 1 如果感冒的那只螞蟻左邊有向右的螞蟻,他會掉頭,則右邊向左的螞蟻會感冒 2 如果感冒的那只螞蟻左...

藍橋杯歷屆試題 螞蟻感冒

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

藍橋杯 歷屆試題 螞蟻感冒

這道題分析了一下得出的結論就是最後感冒的螞蟻數量等於絕對值比第乙個感冒的螞蟻的位置大的且方向向左,還有就是比第乙個感冒的螞蟻的位置小的且方向向右。這裡我們很明顯可以發現2個螞蟻碰面之後並沒有什麼影響,2個速度相同的螞蟻同時掉頭不如直接看成速度相同的螞蟻繼續向前走 include include in...