蓝桥杯——真题训练之蚂蚁感冒

标题:蚂蚁感冒

长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.Scanner;

public class Main{

	static boolean[] dir;//true: 表示方向向右	false: 向左
	static int[] dis;//绝对距离
	static boolean[] gm;//是否感冒

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner = new Scanner(System.in);
		int n = Integer.parseInt(scanner.nextLine());
		dir = new boolean[n];
		dis = new int[n];
		gm = new boolean[n];

		String[] sarr = scanner.nextLine().split("\\s+");
		if (Integer.parseInt(sarr[0]) > 0) {
			dir[0] = true;
			dis[0] = Integer.parseInt(sarr[0]);
			gm[0] = true;
		}
		else
		{
			dir[0] = false;
			dis[0] = -Integer.parseInt(sarr[0]);
			gm[0] = true;
		}
		for (int i = 1; i < n; i++) {
			int tmp = Integer.parseInt(sarr[i]);
			if (tmp > 0) {
				dir[i] = true;
				dis[i] = tmp;
			} else {
				dir[i] = false;
				dis[i] = -tmp;
			}
		}

		cal();
		int count=0;
		for(boolean b:gm)
		{
			if(b)
			{
				count++;
			}
		}

		System.out.print(count);
	}

	static void cal() {
		for(int i=1;i<dis.length-1;i++)
		{
			for(int j=i+1;j<dis.length;j++)
			{
				if(Math.abs(dis[i])>Math.abs(dis[j]))
				{
					int tmp=dis[i];
					dis[i]=dis[j];
					dis[j]=tmp;

					boolean b=dir[i];
					dir[i]=dir[j];
					dir[j]=b;
				}
			}
		}

		/*for(int i:dis)
		{
			System.out.print(i+" ");
		}*/
		if (dir[0]) {
			int mark=0;
			for (int i = gm.length-1; i >0; i--) {
				if (dis[0] < dis[i]) {
					if (dir[i]) {

					} else {
						gm[i] = true;
						mark=1;
					}
				}
				else {
					if(dir[i]&&mark==1)
					{
						gm[i]=true;
					}
				}
			}
		}
		else {
			int mark=0;
			for (int i = 1; i <gm.length; i++) {
				if (dis[0] > dis[i]) {
					if (!dir[i]) {

					} else {
						gm[i] = true;
						mark=1;
					}
				}
				else {
					if(!dir[i]&&mark==1)
					{
						gm[i]=true;
					}
				}
			}
		}
	}
}

蓝桥杯——真题训练之蚂蚁感冒,布布扣,bubuko.com

时间: 2024-10-01 07:00:18

蓝桥杯——真题训练之蚂蚁感冒的相关文章

蓝桥杯——真题训练之李白打酒

标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案? public class Main{ public static void m

蓝桥杯真题(1)

核桃的数量  问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃(当然是不能打碎的) 3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式 输出一个正整数,表示每袋核桃的数量. 样例输入1 2 4 5 样例输出1 20 样例输入2 3 1

第四届蓝桥杯真题 连号区间

本来想练习并查集,然后在看官网提示这是并查集类型题目,上来先默写了一下并查集,想了半天并查集怎么写..我呸,并查集..这里找规律..区间的[最大值-最小值]=[区间长度],直接枚举...讨厌这种找规律的题... #include <iostream> #include <algorithm> #include <cstdlib> #include <cstdio> using namespace std; const int maxn = 50000 + 1

第六届蓝桥杯真题总结

第一题:奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张. 请提交该数字(一个整数),不要写任何多余的内容或说明性文字. #include <iostream> #include <cstdio> #include <cstdlib>

问题 C: 猜算式(蓝桥杯真题)

时间限制: 1 Sec  内存限制: 128 MB 提交: 349  解决: 126 [提交][状态] 题目描述 看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数. 如果没有限定条件,这样的例子很多. 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0. 该算式中1至9的每个数字出现且只出现一次! 比如: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 ..... 请

OJ刷题之《蚂蚁感冒》

题目描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右.每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒.当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行.这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. 输入 第一行输入一个整数n (1< n < 50), 表示蚂蚁的总数.接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁

【蓝桥杯】 入门训练 序列求和

入门训练 序列求和 时间限制:1.0s   内存限制:256.0MB 问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值. 样例输入 4 样例输出 10 样例输入 100 说明:有一些试题会给出多组样例输入输出以帮助你更好的做题. 一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低. 样例输出 5050 数据规模与约定 1

PAT乙级(Basic Level)真题训练

写在前面:PAT冬季赛马上就要开始了!??这一次先报一个乙级冲鸭!我感Jio乙级里面还是有蛮多水题的,也有些题虽然看上去是水题,但是真正用代码实现起来的话会卡你那么一下,比如第5题数素数真的神打脸. 天上不会掉馅饼的,好好学习,努力奋斗才能梦想成真. 1. D进制的A + B(20) 题目描述: 输入两个非负10进制整数A和B(<= 230-1),输出A + B的D(1 <D <= 10)进制数. 输入描述: 输入在一行中依次给出3个整数A,B和D. 输出描述: 输出A + B的D进制数

蓝桥杯 历届试题 兰顿蚂蚁 【模拟】

  历届试题 兰顿蚂蚁   时间限制:1.0s   内存限制:256.0MB     问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其中一方. 蚂蚁的移动规则十分简单: 若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格: 若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格. 规则虽然简单,蚂蚁的行为却十分复杂.刚刚开始时留下的路线都会有接近对