poj 1852 脑洞大开(Ants)

来源:互联网 发布:斐波那契java 编辑:程序博客网 时间:2024/06/05 00:11

题意:有一个一维的数轴,给定其长度len(数轴范围为[0,len])和上面的蚂蚁数n。接下来给出n只蚂蚁的坐标,都位于整数点之上。蚂蚁的移动速度为1,两只蚂蚁迎面相遇立即朝相反方向运动。假设蚂蚁的初始方向未知,问所有蚂蚁掉落数轴的最小和最大时间。

思路:最小时间比较显然,就是所有蚂蚁不碰撞,即偏左的蚂蚁向左走,偏右的蚂蚁向右走(这样想,一旦出现蚂蚁相遇,那么这两只蚂蚁掉落走过的距离之和=len,那么必有一只蚂蚁走过的距离>=len/2。而不出现相撞的话掉落最晚的蚂蚁走过的距离也是<=len/2的)。

最大时间有点像脑筋急转弯。考虑一次相撞,两只蚂蚁方向反向而速度不变,可以看成两只蚂蚁继续走,只不过交换了身份。所以就变成了求某只蚂蚁距离边界最远的距离。

#include <cstdio>#include <algorithm>#include <cstdlib>using namespace std;#define clc(s,t) memset(s,t,sizeof(s))#define INF 0x3fffffff#define N 25int T,len,n;int main(){    scanf("%d",&T);    while(T--){        int i,j,resmin,resmax;        resmin = resmax = 0;        scanf("%d %d",&len,&n);        for(i = 0;i<n;i++){            scanf("%d",&j);            resmin = max(resmin,min(j,len-j));            resmax = max(resmax,max(j,len-j));        }        printf("%d %d\n",resmin,resmax);    }}


0 0
原创粉丝点击