历届试题 蚂蚁感冒

@ 蓝桥杯 练习系统 历届试题 PREV-27

资源限制

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


问题描述

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

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

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

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

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


输入格式

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

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


输出格式

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


测试样例1

Input:
3
5 -2 8

Output:
1

测试样例2

Input:
5
-10 8 -20 12 25

Output:
3

ACcode:

import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) {
        InputReader in = new InputReader(System.in, " ");
        int n = in.nextInt(), T = in.nextInt(), x, tl = 1, tr = 1, nl = 0, nr = 0;
        boolean flag = T > 0; T = abs(T);
        while (n-- > 1) {
            x = in.nextInt();
            if (x > 0 ^ flag) {
                if (abs(x) < T) nl++;
                else nr++;
            } else {
                if (abs(x) > T) tr++;
                else tl++;
            }
        }
        System.out.print(flag? tl + nr: tr + nl);
    }

    static int abs(int a) { return a > 0? a: -a; }

    static class InputReader {

        BufferedReader read;
        StringTokenizer tok;
        String delimiters;

        InputReader(InputStream in) { this(in, " \n\t\r\f"); }

        InputReader(InputStream in, String delimiters) {
            this.read = new BufferedReader(new InputStreamReader(in));
            this.tok = new StringTokenizer("", this.delimiters = delimiters);
        }

        String next() {
            while (!tok.hasMoreTokens())
                try {
                    tok = new StringTokenizer(read.readLine(), delimiters);
                } catch (IOException e) { }
            return tok.nextToken();
        }

        int nextInt() { return Integer.parseInt(next()); }
    }
}

啊这,这题该怎么打标签

以感冒蚂蚁为基准为其他蚂蚁打上标签并统计个数:
同向左
同向右
不同向左
不同向右

然后根据感冒蚂蚁行进的方向输出它们的组合就行

啊这,这题该怎么打标签
那就算贪心吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值