poj 1852 脑洞大开(Ants)

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

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

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

#include 
#include 
#include 
using namespace std;
#define clc(s,t) memset(s,t,sizeof(s))
#define INF 0x3fffffff
#define N 25
int 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


你可能感兴趣的:(数学)