Java实现 蓝桥杯 历届试题 蚂蚁感冒_洛谷蚂蚁感冒java-程序员宅基地

技术标签: Java  历届试题  蓝桥杯  蚂蚁感冒  

问题描述
  长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

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static int n;
    public static ArrayList<point> num;
    public static int count = 1;
    
    static class point {
        public int position;
        public int id;  
        
        public point(int position, int id) {
            this.position = position;
            this.id = id;
        }
    }
    
    class MyComparator implements Comparator<point> {
        public int compare(point arg0, point arg1) {
            int a = Math.abs(arg0.position);
            int b = Math.abs(arg1.position);
            if(a > b)
                return 1;
            else if(a < b)
                return -1;
            return 0;
        }
    }
    
    public void getResult() {
        int judge = num.get(0).position;
        Collections.sort(num, new MyComparator());
        int mid = 0;
        for(int i = 0;i < num.size();i++) {
            if(num.get(i).id == 0) {
                mid = i;
                break;
            }
        }
        int leftMin = 0, leftMax = 0, rightMin = 0, rightMax = 0;
        for(int i = 0;i < mid;i++) {
            if(num.get(i).position < 0)
                leftMin++;
            else if(num.get(i).position > 0)
                leftMax++;
        }
        for(int i = mid + 1;i < n;i++) {
            if(num.get(i).position < 0)
                rightMin++;
            else if(num.get(i).position > 0)
                rightMax++;
        }
        for(int i = 0;i < mid;i++) {
            if(judge > 0 && rightMin > 0 && num.get(i).position > 0)
                count++;
            else if(judge < 0 && num.get(i).position > 0)
                count++;
        }
        for(int i = mid + 1;i < n;i++) {
            if(judge > 0 && num.get(i).position < 0)
                count++;
            else if(judge < 0 && leftMax > 0 && num.get(i).position < 0)
                count++;
        }
     }
    
    
    public static void main(String[] args) {
        Main test = new Main();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        num = new ArrayList<point>();
        for(int i = 0;i < n;i++) {
            int a = in.nextInt();
            num.add(new point(a, i));
        }
        test.getResult();
        System.out.println(count);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1439775520/article/details/97404172

智能推荐

outlook邮箱签名设置_outlook插入签名-程序员宅基地

文章浏览阅读2w次,点赞2次,收藏3次。1、打开电脑左下角,“开始”按钮,选择“所有程序”。2、选择“Microsoft Office”,打开“Microsoft Outlook”软件。3、打开软件后,选择Outlook软件左上角的“文件”,打开“选项”按钮。4、在Outlook选项窗口中,选择“邮件”按钮,找到“创建或修改邮件的签名”,打开“签名”按钮。5、在签名和信纸窗口,找到并打开“新建”按钮。在下面的编辑签名里面,添加需要的签名..._outlook插入签名

linux自动登录gdm,GDM实现开机自动登录Icewm窗口管理器-程序员宅基地

文章浏览阅读989次。在控制台下面敲startx太烦人了,偶用自己的机器,根本用不着密码,总是感觉开机能够自动登录桌面最好,最近上网搜了一下,发现最简单的办法还是用gdm.1.用rcconf设置开启gdm服务,进入gdm登录界面后点选项,配置登录管理器,按提示输入root的密码,这时就可以对gdm进行配置了,点安全-启用自动登录,选取需自动登录的用户,重启,我们就可以自动登入默认的窗口管理器了。2.现在的问题是.xin..._gdm 自动登录

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-程序员宅基地

文章浏览阅读111次。Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈_linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

值得学习的python项目-程序员宅基地

文章浏览阅读107次。此网站整理的2014年值得一学的pytho项目,http://pycoders.com/2014/项目资源都在github上,python程序员进阶必备。就当作2015年的计划吧。先列表,再对号Projects1. robobrowserA library forwebscraping built on Requests and BeautifulSoup. Like Me..._值得学习的python库

Hadoop集群(第5期)_Hadoop安装配置-程序员宅基地

文章浏览阅读678次。1、集群部署介绍1.1 Hadoop简介  Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。  对于Hadoop的集群来讲,可以分

【Tools】PolyWorks MS 2020软件安装详解(加密狗版)_软件安装程序哪个文件包含加密狗-程序员宅基地

文章浏览阅读6.4k次。00. 目录文章目录00. 目录01. PolyWorks概述02. PolyWorks下载03. PolyWorks配置04. PolyWorks安装04. PolyWorks激活05. 附录01. PolyWorks概述PolyWorks Suite 2020是由InnovMetric推出的一款功能强大且非常专业的3D测量软件,软件可以完美地将3D测量技术集成到工业制造过程中,这个是PolyWorks 2019的升级版本,软件提供了丰富实用的功能,包括3D建模、点云扫描、尺寸分析等,同时还拥有自适_软件安装程序哪个文件包含加密狗

随便推点

ETL工具——kettle实现简单的数据迁移_kettle迁移webserver服务-程序员宅基地

文章浏览阅读1.2k次。1、Kettle概念Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。2.安装与启动KETTLE本身是绿色安装版软件,直接对压缩包解压后即_kettle迁移webserver服务

快速从0-1完成聊天室开发——环信ChatroomUIKit功能详解-程序员宅基地

文章浏览阅读1.1k次,点赞26次,收藏13次。环信 Chatroom UIKit 采用最新的 UI 框架和开发语言,可以快速上手。同时,该 UIKit 对标国际主流的社交应用,提供开箱即用的社交组件,一方面,可以快速将其集成到自己的应用程序中,另一方面还支持对功能组件进行自定义,灵活定制符合自身需求的聊天室应用。弹幕消息是聊天室最为核心的功能。环信 Chatroom UIKit 支持业内主流的消息样式,包括发送时间显示、用户身份标识、用户头像、昵称等元素,提供极为灵活的弹幕消息自定义能力。还可以根据业务需要,通过开关控件控制所有元素的显示或隐藏。

14_Shell语言———for循环实例演示(一)-程序员宅基地

文章浏览阅读145次。例1.写一个脚本,使用for循环创建目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir,并将它们的权限均修改为750;使用mkdir命令创建目录,使用chmod命令修改权限,故此脚本可以写成:#!/bin/bashforDirNamein/tmp/1.dir/tmp/2.dir/tmp/3.dir;domkdir$DirNam..._使用for循环在目录exam下循环创建文件1.sh,2.sh

鼠标移动,按下,松开记录坐标和偏移量事件_通过鼠标移动事件处理,获取鼠标在 x、y 方向的偏移 量-程序员宅基地

文章浏览阅读3.5k次。body{margin: 0;padding: 0;}div{width: 300px;height: 300px;border: 1px solid #000000;margin-top: 20px;margin-left: 30px;}//判断鼠标是否按下var isDown = false;//实时监听鼠标位置var m_通过鼠标移动事件处理,获取鼠标在 x、y 方向的偏移 量

JAVA中级(十五)AJAX异步请求,页面局部刷新.JSON数据交互_使用异步数据交互方式实现页面的局部更新;利用ajax函数链接到json数据文件,要求使-程序员宅基地

文章浏览阅读1.6k次,点赞6次,收藏11次。AJAXhttp请求一般有两种。一种是form表单的submit.还有一个就是AJAX请求.前者请求会刷新整个页面。AJAX请求则是局部刷新.AJAX技术是一种异步请求技术。它在web中主要使用在页面的局部刷新。比如某个视频网站提供了推荐视频的刷新按钮。点击它只会刷新推荐视频列表而不会刷新正在播放的视频。随着这个前后端的分离和众多优秀的前端框架。现在越来越多的项目都只有AJAX请求。1,J..._使用异步数据交互方式实现页面的局部更新;利用ajax函数链接到json数据文件,要求使

简记CentOS6.4安装_安装centos6.4-程序员宅基地

文章浏览阅读113次。下载好镜像文件,以VMware12为例。**选择创建新的虚拟机。接下来为可兼容在那些平台,例如12.0可运行在之后15.0。不可运行在之前10.0选择细化版本,这里我只有CentOS64接下来就是虚拟机名称以及位置设置网络类型这里要注意用那个要开启vm服务选项应该是未设置VMware开机启动所以每回使用前要手动打开如果嫌麻烦在安装时设置开机启动就ok了接下来两步按推荐的选择 在..._安装centos6.4

推荐文章

热门文章

相关标签