zoj2376

#include<stdio.h>
int main()
{
    int n,length,number,max,min,i,l,l1,t;
    scanf("%d",&n);
    while(n--)
    {
    scanf("%d%d",&length,&number);
    min=0;
    max=0;
    for(i=0;i<number;i++)
    {
    scanf("%d",&l);
    l1=length-l;
    if(l1<l)
    {
    t=l1;l1=l;l=t;
    }
    if(min<l)min=l;
    if(l1>max)max=l1;
    }
    printf("%d %d\n",min,max);
    }
    return 0;
}

题目要点:
    杆长一定,各只蚂蚁初始方向任意,蚂蚁速度均相同,到达杆边即坠落,两只蚂蚁
相遇立刻反相继续移动。

引理:
    由于蚂蚁的速度都相同,且相遇之后马上反相继续移动,所以从开始到一特定时刻
所有蚂蚁的已行路程是相同的(除已经掉下横杆的)。

定理:
    当任意两只蚂蚁相遇时,各自反相继续运动,相当于各自继续向前移动,但两者交
换各自已已行路程,由引理可知,在两只蚂蚁相遇这一时刻,两者已行路程是相等的,
由此得证,两只蚂蚁相遇后,各自继续向前与各自反相最终所行路程相等。(横杆宽度
不够等因素没有意义,所以忽略)。

回到题目,设杆长L,某只蚂蚁位置X,由于相遇不影响结果,求最长时间只需考虑那只可
以离边界最大值最大的蚂蚁,求最短时间只需考虑那只离边界最小值最大的蚂蚁,所以
最长时间为Max(n只蚂蚁的Max(X,L-X)),最短时间为Max(n只蚂蚁的Min(X,L-X))。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值