• JZOJ__Day 7:【普及模拟】蚂蚁


    题目描述

        n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。
    

    例如:竿子长10cm,3只蚂蚁位置为2 6 7,最短需要4秒(左、右、右),最长需要8秒(右、右、右)。

    输入

    第1行:2个整数N和L,N为蚂蚁的数量,L为杆子的长度(1 <= L <= 10^9, 1 <= N <= 50000)
    第2 - N + 1行:每行一个整数A[i],表示蚂蚁的位置(0 < A[i] < L)

    输出

    输出2个数,中间用空格分隔,分别表示最短时间和最长时间。

    样例输入

    3 10
    2
    6
    7

    样例输出

    4 8

    数据范围限制

    对于10%的数据n≤1
    对于20%的数据n≤2
    对于50%的数据n≤5
    对于60%的数据n≤50
    对于70%的数据n≤500
    对于80%的数据n≤5000
    对于100%的数据n≤50000

    提示

    数据有梯度,欢迎合理骗分。

    分析
    考虑每只蚂蚁较复杂,我们试着转换思想
    看成蚂蚁碰头之后不回头,因为每个蚂蚁都是一样的。
    设蚂蚁位置为pi,最短时间=max(min(pi, l-pi)),最长时间=max(max(pi,l-pi))

    程序:

    uses math;
    var
    i:longint;
    n,l,short,long:int64;
    p:array[0..50000]of int64;
    begin
        readln(n,l);
        short:=0;long:=0;
        for i:=1 to n do
        begin
            readln(p[i]);
            if min(p[i],l-p[i])>short then short:=min(p[i],l-p[i]);
            if max(p[i],l-p[i])>long then long:=max(p[i],l-p[i]);
        end;
        write(short,' ',long);
    end.
  • 相关阅读:
    jQuery操作Table学习总结[转]
    SQL语句中的单引号处理以及模糊查询
    正则表达式实现将html文本转换为纯文本格式(将html字符串转换为纯文本方法)
    ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略(转)
    Response.Redirect在新窗口打开(转载)
    position属性absolute与relative 的区别
    下载文件
    gridveiw的使用
    MarkDown和流程图诠释你的代码
    git使用笔记
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500086.html
Copyright © 2020-2023  润新知