蓝桥杯 蚂蚁感冒

历届试题 蚂蚁感冒  

时间限制:1.0s   内存限制:256.0MB


问题描述

长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。

每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

输入格式

第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。

接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。

输出格式

  要求输出1个整数,表示最后感冒蚂蚁的数目。

样例输入

3

5 -2 8

样例输出

1

样例输入

5

-10 8 -20 12 25

样例输出

3


POJ也有道ants 原理一样 写的有点臃肿 写了也有点久 功力还不够

#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;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 高三不知不觉已经过去一个月了,除了每个星期的周测以及小测验,其他的事情好像没有怎么改变,依然是成堆的资料和睡不...
    徐心艺阅读 249评论 2 3
  • 我们与其他动物一般,因为某种力量,产生了生命。 有了生命,于是,我们活着,并且,通过一系列的活动,让这种活着的状态...
    紫气东来JL阅读 589评论 0 0
  • 此时此刻,你就睡在我身边。各自戴着情侣对戒。有着好友和家人的祝福,还有我们自己的打闹。
    留影随行阅读 200评论 0 1
  • 河南新郑一名大三学生李函泽,他长得酷似马云,同学和导员经常称他“小马云”,但他认为自己更像吴彦祖。他希望自己毕业后...
    万象焦点阅读 84评论 0 0
  • 闷热的午后,还没有接到爸爸的报平安电话。惴惴不安地拨过去,一接通,听见爸爸略有些无力的声音,心,扑通一下。 妈妈的...
    狗熊的熊阅读 391评论 0 0