Ants POJ - 1852(弹性碰撞)

本文探讨了一群蚂蚁在水平杆上行走的问题,通过分析蚂蚁的原始位置,利用弹性碰撞原理,计算了所有蚂蚁从杆上掉下来所需的最早和最晚时间。代码实现简洁,通过min和max函数高效解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一群蚂蚁在一根长l厘米的水平杆上行走,每根杆的速度恒定为1厘米/秒。当一只蚂蚁走到杆的末端时,它立刻从杆上掉下来。当两只蚂蚁相遇时,它们会转身向相反的方向走。我们知道蚂蚁在柱子上的原始位置,不幸的是,我们不知道蚂蚁行走的方向。你的任务是计算所有蚂蚁从极点上掉下来所需要的最早和最晚的可能时间。              

输入              

输入的第一行包含一个整数,给出后面的事例数。每种情况下的数据以两个整数开始:极点的长度(单位:cm)和n,极点上的蚂蚁数量。这两个数字后面跟着n个整数,给出了每只蚂蚁在极点上的位置,即从极点左端开始测量的距离,没有特定的顺序。所有输入整数不大于1000000,并用空格分隔。              

产量              

对于每种输入情况,输出两个由单个空格分隔的数字。第一个数字是所有蚂蚁从极点上掉下来的最早时间(如果他们的行走方向选择得当),第二个数字是最晚的可能时间。 

水题一枚,使用弹性碰撞的原理,全都掉下去的最小时间就是离两边最远的那个蚂蚁掉下去。最长时间是从这头走到那头用时最长的那个蚂蚁。思路就是这样,很简单。巧用max ,min 函数解决问题。

代码:

#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
const int maxn=1000000;
typedef long long ll;
using namespace std;
int a[maxn];
int l,n;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int zuixiaomax=-1;
		int zuidamax=-1;
		cin>>l>>n;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		for(int i=1;i<=n;i++)
		{
			int c=min(a[i],l-a[i]);
			zuixiaomax=max(c,zuixiaomax);
		}
		cout<<zuixiaomax<<' ';
		
		for(int i=1;i<=n;i++)
		{
			int c=max(a[i],l-a[i]);
			zuidamax=max(zuidamax,c);
		}
		cout<<zuidamax<<endl;
		
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值