爬行的蚂蚁-Java-2017百度秋招

package 百度;

import java.util.Scanner;

/**
 * 题目描述: 
 * 有些蚂蚁在一条水平线上爬行,每只蚂蚁的速率都是1cm/s。蚂蚁爬到水平线的任何一个端点时会立刻掉下来,当两只蚂蚁碰到一起时他们都会立刻调头向相反方向移动。
 * 已知蚂蚁们在水平线上的初始位置,但不幸的是,它们初始的运动方向是不知道的。请计算所有蚂蚁从水平线上掉下来可能所需的最早和最晚的时间。
 * 
 * 输入 :第一行有一个整数,表示有多少组测试数据。
 * 每组测试数据以两个整数开始:水平线长度(单位cm)和蚂蚁数,随后的一行中有n个整数,表示每只蚂蚁距水平线左端点的距离。所有的输入的整数都小于1000000而且用空格隔开。
 * 样例输入 2 
 * 10 3 
 * 2 6 7 
 * 214 7 
 * 11 12 7 13 176 23 191 
 * 
 * 输出: 对于每组测试数据,在同一行输出两个整数,第一个表示所有蚂蚁从水平线上掉下来的最早时间,第二个表示最晚时间。 
 * 样例输出 4 8 
 * 38 207
 * 
 * @author 崔洪振367
 * @version 创建时间:2017年5月15日 下午4:41:06
 * 
 * 解题思路:在给定的水平线上寻找两个值:一个值是距离某个端点最近,另一个值距离某个端点最远。输出这两个值。
 * 最远的距离也就是离着最近的端点的相反端点。比如:水平长度为10,则2的最近点是0,最远距离是10-2=8.
 */
public class Q2017秋招_爬行的蚂蚁 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while (scanner.hasNext()) {
			int T = scanner.nextInt();
			for(int t=0; t<T; t++){
				int len = scanner.nextInt();//水平长度
				int ant = scanner.nextInt();//蚂蚁数目
				int[] ants = new int[ant];//每只蚂蚁距离
				int lens = len / 2;//水平中点长度
				for(int i=0; i<ant; i++){
					int dis = scanner.nextInt();
					if(lens >= dis){
						ants[i] = dis;
					}else {
						ants[i] = len - dis;//全长-远距离=近距离
					}
				}
				int max = 0;
				int min = lens;
				for(int i=0; i<ant; i++){
					max = Math.max(max, ants[i]);//要所有蚂蚁都掉下来,则最早时间是位于中点位置处的蚂蚁到达端点的时间
					min = Math.min(min, ants[i]);//最晚掉下来的蚂蚁是距离一个端点最近的相反方向的端点。
				}
				System.out.println(max + " " + (len-min));
			}

		}

	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值