问题描述

  长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);
}
}

最新文章

  1. 小菜学习设计模式(四)—原型(Prototype)模式
  2. init.sh 学习(转
  3. HDU 5057 Argestes and Sequence --树状数组(卡内存)
  4. BZOJ 3436: 小K的农场 差分约束
  5. [leetcode] 400. Nth Digit
  6. 在Mapper中进行循环判断
  7. jq-实战之表格筛选
  8. Oracle ASM数据库故障数据恢复过程
  9. Notepad++编译和运行C语言 (GCC)
  10. Navicat MySQL 自动备份
  11. 1093. Count PAT’s (25)-统计字符串中PAT出现的个数
  12. Elasticsearch学习系列之term和match查询
  13. 一次“ora-12170 tns 连接超时”的经历
  14. BZOJ 3510 - 首都 「 $LCT$ 动态维护树的重心」
  15. CSS3背景总结
  16. JAVA学习资源网站
  17. idea编译修改jdk版本
  18. 20145201《Java程序设计》第8周学习总结
  19. 初识C++之虚函数
  20. [ZPG TEST 109] 兔子跳跃【构图】

热门文章

  1. hive数据仓库入门到实战及面试
  2. shell 光标处理快捷键
  3. java mybatis中大于号小于号的转义
  4. android LoaderManger加载数据Tip
  5. 前端面试题-WebSocket的实现和应用
  6. GitHub 热点速览 Vol.20:VSCode 插件全家桶新增画图小能手
  7. bcdedit 替代easybcd 编辑grub
  8. React:Composition
  9. DRF节流组件
  10. matlab第六章数据分析与多项式计算