智力題 2014藍橋杯 C C B組 螞蟻感冒

2021-10-03 09:57:10 字數 1535 閱讀 9643

引言

對於演算法題,特別是藍橋杯的演算法題,coding能力固然是一方面,但是思維方式和思維能力更重要。

藍橋組委推薦的cc150思維是解題的實用思維。

題面

問題描述

長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思路

第一印象就是暴力模擬,用乙個陣列或者結構體陣列模擬螞蟻個體,每乙個時鐘改變一次狀態,相遇就取反符號。

->這樣做就陷入了出題人的圈套了,這道題本質上是一道智力題,需要仔細觀察,大膽猜測,小心求證。模擬的話,一方面**不好寫,另一方面時間複雜度會非常非常大。不可取。

這道題在《挑戰程式設計程式設計》中有提到過。最關鍵的一點是:把「兩螞蟻相遇後反向」這個條件理解為:「兩螞蟻相遇後不改變方向」。實質上,這個題目需要就算的是「(感冒)螞蟻的數目」,作為數目統計而言,各個螞蟻本質上是一樣的,相遇後方向改不改變都是「乙隻螞蟻向左乙隻螞蟻向右」。因此兩螞蟻相遇後反向兩螞蟻相遇後不改變方向在用於數目統計時,效果是一樣的。

具體思路

對於乙隻初始狀態朝右的螞蟻,即陣列第乙個數為正數時。考慮它的右側有沒有方向相反的螞蟻。為什麼?因為如果右側沒有異向的螞蟻,那麼在「螞蟻每次移動一厘公尺」的條件下,第一只感冒螞蟻左側的螞蟻不會接觸到它,右側的只有同向的也不會接觸到它,因此數目為1。如果右側有異向的螞蟻,那麼這些螞蟻都會被感染,此外,這些異向的螞蟻還會繼續往前行走,與初始螞蟻左側的狀態朝右走的螞蟻相遇。因此,這種情況下,數目為右側異向螞蟻數目+左側同向螞蟻數目

對於乙隻初始狀態朝左的螞蟻,數目統計就與上述相反。若左側沒有異向的螞蟻,數目為1。若有,則數目為左側異向螞蟻數目+右側同向螞蟻數目。 **

**沒儲存…不想敲了(:逃

藍橋杯2023年c c B組(地宮尋寶)

x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它 當然,也可以不拿 當小明走到出口...

2013藍橋杯省賽A組C C B題

小明正看著 203879 這個數字發呆。原來,203879 203879 41566646641 這有什麼神奇呢?仔細觀察,203879 是個6位數,並且它的每個數字上的數字都是不同的,並且它平方後的所有數字上都不出現組成它自身的數字。具有這樣特點的6位數還有乙個,請你找出它!再歸納一下篩選要求 1...

2023年第五屆藍橋杯C C B組決賽真題題解

小明和他的表弟一起去看電影,有人問他們的年齡。小明說 今年是我們的幸運年啊。我出生年份的四位數字加起來剛好是我的年齡。表弟的也是如此。已知今年是2014年,並且,小明說的年齡指的是周歲。請推斷並填寫出小明的出生年份。這是乙個4位整數,請通過瀏覽器提交答案,不要填寫任何多餘的內容 比如,他表弟的出生年...