程式設計競賽 螞蟻感冒

2022-06-01 02:03:08 字數 2122 閱讀 5776

題目:

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

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

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

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

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

【資料格式】

第一行輸入乙個整數n (

1< n < 50

), 表示螞蟻的總數。

接著的一行是n個用空格分開的整數 xi (-100

< xi < 100

), xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,資料中不會出現0值,也不會出現兩隻螞蟻占用同一位置。其中,第乙個資料代表的螞蟻感冒了。

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

例如,輸入:

35 -2

8程式應輸出:

1再例如,輸入:

5-10

8 -20

1225

程式應輸出:

3資源約定:

峰值記憶體消耗

<256m

cpu消耗

<1000ms

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

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

注意: main函式需要返回0

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

注意: 所有依賴的函式必須明確地在原始檔中 #include

, 不能通過工程設定而省略常用標頭檔案。

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

投機取巧解法:

#include #include

using

namespace

std;

intmain()

for(int i=1; ii)

//找到感冒螞蟻的左邊的螞蟻且向右走的

if(data[i]>0&&abs(data[i])0

]))

}//判斷是否為特殊情況

if((data[0]<0&&right==0)||(data[0]>0&&left==0))//

第一只螞蟻向左走,但是右面全是向左的

else

return0;

}

正常解法(感謝@徐 的**提供)

#include#include

using

namespace

std;

bool gan(int a, int

b)int antnum(int *a, int *flag,int

n)

else

if (dis == -2

)

a[i]++;

a[i] = -a[i];

a[i + 1]++;

a[i + 1] = -a[i + 1

]; }

else

if (dis > -2

)

a[i] = -a[i];

a[i + 1] = -a[i + 1

]; }

}else

if (a[i] < a[i + 1])//

1/5, -1/5}}

for (int i = 0; i < n; i++)

if (flag[i] == 1

) count++;

return

count;

}int

main()

flag[

0] = 1

;

for(int i=0;i1;i++)//

按絕對值氣泡排序

for (int j = 0; j < n - i - 1; j++)

}cout

<< antnum(a, flag, n)

}

HDU 螞蟻感冒

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

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