Ants poj1852

Ants

在这里插入图片描述
题意很清楚,但是刚开始看确实没有任何思路,因为对我来说,即使暴力穷举,由于碰撞问题的复杂性(或者是我单纯的菜)依旧是解决不了的,更何况穷举所带来的指数级的时间复杂度,对于这个数量的数据,基本也会时间超限。
之前看了下别人的思路,发现,其实最短时间,只需要蚂蚁将方向转到离端点最近的方向就可以了,
至于最长时间,我们可以发现,当将两只蚂蚁无差别话后,两只蚂蚁即使相遇后向反方向行走,但是我们可以看成两只蚂蚁交错过去依旧按起始方向行走,这样每只蚂蚁都是独立运动的,那么只需要算每只蚂蚁掉下去的时间并找出最长时间即可

#include <iostream>
#include <cstdio>

using namespace std;

const int MAXN = 1000000;
int temp[MAXN];

int main()
{
    int t;
    cin>>t;
    while(t--){
        int l,n;
        scanf("%d%d",&l,&n);
        int Mina = -1,Maxa = -1;
        for(int i = 0; i < n; i++){
            scanf("%d",&temp[i]);
      /*最短*/      Mina = max(Mina,min(temp[i],l - temp[i]));//两处都使用max是因为要求所有蚂蚁都从杆上落下的时间
            Maxa = max(Maxa,max(temp[i],l - temp[i]));//最长
        }
        printf("%d %d\n",Mina,Maxa);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值