SDNU 1206.螞蟻感冒 【代碼如此簡單,思維練習】【7月29】
阿新 • • 發佈:2018-02-04
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】