藍橋杯螞蟻感冒

螞蟻感冒

時間限制:1000 ms  |  內存限制:65535 KB
難度:2
描述
長100釐米的細長直杆子上有n只螞蟻。它們的頭有的朝左,有的朝右。 每隻螞蟻都只能沿着杆子向前爬,速度是1釐米/秒。 當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。 這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。 請你計算,當所有螞蟻都爬離杆子時,有多少隻螞蟻患上了感冒。
輸入
第一行輸入一個整數n (1 < n < 50), 表示螞蟻的總數。


接着的一行是n個用空格分開的整數 Xi (-100 < Xi < 100), Xi的絕對值,表示螞蟻離開杆子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,數據中不會出現0值,也不會出現兩隻螞蟻佔用同一位置。其中,第一個數據代表的螞蟻感冒了。
輸出
要求輸出1個整數,表示最後感冒螞蟻的數目。
樣例輸入
3
5 -2 8
5
-10 8 -20 12 25
樣例輸出駿
1
3
來源
第五屆藍橋杯
上傳者
TC_楊闖亮


第一眼看到這題就想起了巫澤俊大神寫的競賽書上的例題,思路一模一樣,掉頭和穿過情況其實是一樣的,明白這一點就好想了,只要是比第一隻螞蟻位置靠後並且向左走的都會傳染,同理,比第一隻螞蟻位置靠前並且像右走的也會感染。所以式子就出來了,ans=right+left+1(要加第一隻螞蟻)。但有兩種特殊情況,1.所有螞蟻全向右走 2.所有螞蟻全向左走,這兩種情況輸出的都是1

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    int a[100];
    int n;
    while(cin>>n)
    {
        int i,j,k;
        int l=0,r=0;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        for(i=1;i<n;i++)
        {
            if(fabs(a[i])>fabs(a[0])&&a[i]<0)
                l++;
            if(fabs(a[i])<fabs(a[0])&&a[i]>0)
                r++;
        }
        if(a[0]<0&&r==0||a[0]>0&&l==0)
            cout<<"1"<<endl;
        else
        cout<<l+r+1<<endl;

    }
}


發佈了24 篇原創文章 · 獲贊 28 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章