uva 10714 - Ants

简介: 点击打开链接uva10714 题目意思:    有一群蚂蚁在走动,走的速度都是1cm/s,现在有一段长度为L的路,只知道蚂蚁的位置但是不知道蚂蚁的走的方向,每个蚂蚁走的不一定是相同的,现在有如果有两只蚂蚁从相反方向走的时候碰头了,那么所有的...

点击打开链接uva10714


题目意思:    有一群蚂蚁在走动,走的速度都是1cm/s,现在有一段长度为L的路,只知道蚂蚁的位置但是不知道蚂蚁的走的方向,每个蚂蚁走的不一定是相同的,现在有如果有两只蚂蚁从相反方向走的时候碰头了,那么所有的蚂蚁马上走向相反的方向,问我们当所有蚂蚁都走到终点(两边都是终点)时候最小的时间和最大的时间


解题思路:       1:先看一个小例子:0—————A(4)—》——《—B(8)—————10,在图上有两只蚂蚁同时出发,现在A蚂蚁从左往右走1 cm/s,B蚂蚁从右往左也是 1 cm/s,如果A  B相遇的时候就和A走相同的方向,问A B到达终点时候B走了多远,由图知道A  B是同时走的,并且A  B速度一样,那么我们知道A B最终肯定是一起到的终点,所以B 走的路程就是A 走的路程,所以B走的路程就是10-4 = 6
                         2:现在来看这一题,其实和上面是一样的原理,只是蚂蚁多来而已。那么现在来分析一下,假设路径为A——————D—C(中心)—E————————B,图上A B分别为两端的终点,由图可知:C到达A  B的路程都是相同的;D点到达A的路程小于到达B;E点到达B的路程小于到达A;由上面图,那么知道我们要从中心出发去考虑最小值个最大值
                       3:样列解析
                       1只有一个点:  
                       1:10  2           0——2————————10                             最小值是2,最大值是8  
                       2:10  6           0———————6———10                             最小值是4,最大值是6
                       2 所有点在中心的左边
                       10 4
                       1 2 3 4              0—1—2—3—4——————————10        最小值是4,最大值是9
                       3 所有点在中心的右边
                       10 4
                       6 7 8 9              0—————————6—7—8—9——10        最小值是4,最大值是9
                       4 中心两边都有
                       10 4
                       2 4 6 8              0——2——3————6————9——10         最小值是4,最大值是9   


代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <set>
using namespace std;
#define MAXN 100010

int t , l , n;
int pos[MAXN];

void solve() {
    int pos_r , pos_l;
    int min , max;
    sort(pos , pos+n);
    //只有左半部分
    if(pos[0] >= l/2){
        printf("%d %d\n" , l-pos[0] , pos[n-1]);
        return;
    }
    //只有右半部分
    if(pos[n-1] < l/2){
        printf("%d %d\n" , pos[n-1] , l-pos[0]);
        return;
    }
    //两边都有
    for(int i = 0 ; i < l ; i++){
        if(pos[i] < l/2 && pos[i+1] >= l/2){
            pos_l = i ; pos_r = i+1;//找到中心旁边的两个点
            break;
        }
    }
    //求出最大值和最小
    min = pos[pos_l]>l-pos[pos_r]?pos[pos_l]:l-pos[pos_r];
    max = l-pos[0]>pos[n-1]?l-pos[0]:pos[n-1];
    printf("%d %d\n" , min , max);
    
}

int main() {
   // freopen("input.txt" , "r" , stdin);
    scanf("%d" , &t);
    while(t--){
        scanf("%d%d" , &l , &n);
        for(int i = 0 ; i < n ; i++)
            scanf("%d" , &pos[i]);
        if(n != 1) solve();
       //一个点的时候特判
        else{
            if(pos[0] > l/2) printf("%d %d\n" , l-pos[0] , pos[0]);
            else printf("%d %d\n" , pos[0] , l-pos[0]);
        }
    }
    return 0;
}




目录
相关文章
UVa11876 - N + NOD (N)
UVa11876 - N + NOD (N)
64 0
UVa389 - Basically Speaking
UVa389 - Basically Speaking
37 0
uva127 "Accordian" Patience
uva127 "Accordian" Patience
43 0
UVA10474 大理石在哪儿 Where is the Marble?
UVA10474 大理石在哪儿 Where is the Marble?
UVA - 10474 Where is the Marble
Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on them.
1419 0