1. 程式人生 > >SDNU 1206.螞蟻感冒 【代碼如此簡單,思維練習】【7月29】

SDNU 1206.螞蟻感冒 【代碼如此簡單,思維練習】【7月29】

for adding 螞蟻 簡單 pan port inpu sca stat

螞蟻感冒

Description

長100厘米的細長直桿子上有n僅僅螞蟻。

它們的頭有的朝左,有的朝右。

每僅僅螞蟻都僅僅能沿著桿子向前爬,速度是1厘米/秒。 當兩僅僅螞蟻碰面時。它們會同一時候掉頭往相反的方向爬行。

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

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

Input

第一行輸入一個整數n (1 < n < 50), 表示螞蟻的總數。

接著的一行是n個用空格分開的整數 Xi (-100 < Xi < 100), Xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左。數據中不會出現0值,也不會出現兩僅僅螞蟻占用同一位置。

當中。第一個數據代表的螞蟻感冒了。

Output

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

Sample Input

3
5 -2 8

Sample Output

1
是不是沒有思路?初次做這個題。確實沒思路。只是劉汝佳的訓練指南開篇就提到過,兩個螞蟻碰頭然後轉向繼續爬。從遠處看就像相互穿過去一樣。這樣想的話。就簡單了。僅僅需推斷感冒的螞蟻左側有多少僅僅往右爬的,在推斷右側有多少僅僅往左爬的,加起來就是答案。千萬別忘了本身也是一僅僅感冒的螞蟻。代碼例如以下:

#include<cstdio>
int main(){
    int n,x,f[110]={0},t,sum=1;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&x);
        if(i==0) x>0?t=x:t=-x;
        x>0?

f[x]=1:f[-x]=-1; } for(int i=0;i<t;i++) if(f[i]==1) sum++; for(int i=t+1;i<110;i++) if(f[i]==-1) sum++; printf("%d\n",sum); return 0; }



SDNU 1206.螞蟻感冒 【代碼如此簡單,思維練習】【7月29】