算法刷题:Ad Hoc 0102-Ants

前言

大家好,这篇文章我们发布一道新的题目,希望对大家有所帮助。

1. 题目描述

一支蚂蚁军队在长度为 l厘米的横竿上走,每只蚂蚁的速度恒定且为1厘米/秒,米只行走的蚂蚁到达横竿终点的时候,它就立即掉了下去:当两只蚂蚁相遇的时候,它们就调转头,并开始往相反的方向走。我们知道蚂蚁在横竿上原来的位置,但不知道蚂奴行走的方向。请计算所有蚂蚁从横竿上掉下去的最早可能的时间和最晚可能的时间。
输入
输人的第一行给出一个整数,表示测试用例个数。每个测试用例首先给出两个整数:横竿的长度(以厘米为单位)和在横竿上的蚂蚁的数量n。接下来给出n个整数,表示每只蚂蚁在横竿上从左端测量过来的位置,没有特定的次序。所有输人数据不大于1000 00数据间用空格分隔。
输出
对于输人的每个测试用例,输出用一个空格分隔的两个数,第- - 个数是所有的蚂蚁掉下横竿的最早可能的时间(如果它们的行走方向选择合适),第二个数是所有的蚂蚁掉下横竿的最晚可能的时间。

样例输入样例输出
24 8
10 338 207
2 6 7
214 7
11 12 7 13 176 23 191

2. 题目分析

因为蚂蚁的数量可能会众多,爬行的方式会有非常多种,所以我们没有办法通过一一列举的方式来解决这道题目。
如果我们假设蚂蚁在爬行的过程中即使相遇了也不理睬对方而继续走自己的路,那么所有蚂蚁掉落时间就只有两个取值了,一个为向左走的时间,一个为向右走的时间。由此我们可以知道,最早时就是每只蚂蚁掉落的最小时间,最大值就是每只蚂蚁掉落的最大时间。

3. 代码实现

#include<iostream>
using namespace std;

int c, big, little,k, L, n;

int main()
{
	cin >> c;
	while (c--&&(cin>>L>>n))
	{
		big = little = 0;
		for (int i = 0; i < n; i++)
		{
			cin >> k;
			if (k>big)
				big = k;
			if (L - k > big)
				big = L - k;
			if (k > L - k)
				k = L - k;
			if (k > little)
				little = k;
		}
		cout << little << "  " << big;
	}
	if (c == -1)
		cout << endl << "missing input" << endl;
}

后记

好的,这篇文章我们就分享到这里,希望对大家有所帮助,下期见。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxkeepcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值