歷屆試題 螞蟻感冒 ?
時(shí)間限制:1.0s ? 內(nèi)存限制:256.0MB
問題描述
長(zhǎng)100厘米的細(xì)長(zhǎng)直桿子上有n只螞蟻窝剖。它們的頭有的朝左,有的朝右倒谷。
每只螞蟻都只能沿著桿子向前爬,速度是1厘米/秒。
當(dāng)兩只螞蟻碰面時(shí)帮掉,它們會(huì)同時(shí)掉頭往相反的方向爬行。
這些螞蟻中窒典,有1只螞蟻感冒了蟆炊。并且在和其它螞蟻碰面時(shí),會(huì)把感冒傳染給碰到的螞蟻瀑志。
請(qǐng)你計(jì)算涩搓,當(dāng)所有螞蟻都爬離桿子時(shí),有多少只螞蟻患上了感冒劈猪。
輸入格式
第一行輸入一個(gè)整數(shù)n (1 < n < 50), 表示螞蟻的總數(shù)昧甘。
接著的一行是n個(gè)用空格分開的整數(shù) Xi (-100 < Xi < 100), Xi的絕對(duì)值,表示螞蟻離開桿子左邊端點(diǎn)的距離战得。正值表示頭朝右充边,負(fù)值表示頭朝左,數(shù)據(jù)中不會(huì)出現(xiàn)0值常侦,也不會(huì)出現(xiàn)兩只螞蟻占用同一位置浇冰。其中,第一個(gè)數(shù)據(jù)代表的螞蟻感冒了聋亡。
輸出格式
要求輸出1個(gè)整數(shù)肘习,表示最后感冒螞蟻的數(shù)目。
樣例輸入
3
5 -2 8
樣例輸出
1
樣例輸入
5
-10 8 -20 12 25
樣例輸出
3
POJ也有道ants 原理一樣 寫的有點(diǎn)臃腫 寫了也有點(diǎn)久 功力還不夠
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <sstream>
#include <algorithm>
int N, M;
//const int MAXN = , MAXM = 0;
//typedef long long ll;
using namespace std;
int arr[70];
int main() {
scanf("%d", &N);
int head = 0;
for (int i = 0, a; i < N; i++) {
scanf("%d", &arr[i]);
if (i == 0) head = arr[i];
}
int ans = 1;
int cnt = 0;
if (head > 0) {
for (int i = 0, a; i < N; i++) {
if (abs(arr[i]) > head && arr[i] < 0) cnt++;
}
if (cnt) {
for (int i = 0, a; i < N; i++) {
if (abs(arr[i]) < head && arr[i] > 0) cnt++;
}
}
}
else {
head = -head;
for (int i = 0, a; i < N; i++) {
if (abs(arr[i]) < head && arr[i] > 0) cnt++;
}
if (cnt) {
for (int i = 0, a; i < N; i++) {
if (abs(arr[i]) > head && arr[i] < 0) cnt++;
}
}
}
cout << ans+cnt << endl;
return 0;
}