题意:有n只蚂蚁在木棍上爬行,每只蚂蚁的速度都是每秒1单位长度,现在给你所有蚂蚁初始的位置(蚂蚁运动方向未定),蚂蚁相遇会掉头反向运动,让你求出所有蚂蚁都·掉下木棍的最短时间和最长时间。

分析:(其实很久之前在洛谷上就做过一个类似的题,好像叫独木桥)

考虑对于两个人相遇的过程,以及最后结果的最值

第一个人位置为x1,第二个人位置为x2,其中x2>x1

这里就有两人分别朝左朝右共有4种情况

  1.第一个人朝左,第二个人朝左

  显然第一个人掉下去的时间是x1,第二个人掉下去的时间是x2,总用时就是x2

  2.第一个人朝左,第二个人朝右

  显然第一个人掉下去的时间是x1,第二个人掉下去的时间是l-x2,总用时就是max(l-x2,x1)

  3.第一个人朝右,第二个人朝右

  显然第一个人掉下去的时间是l-x1,第二个人掉下去的时间是l-x2,总用时就是max(l-x1,l-x2)

  4.第一个人朝右,第二个人朝左

  这就不显然了,这样他们会发生相遇,并且掉头走,首先他们相遇的时间是(x2-x1)/2 ,他们相遇的位置就是(x1+x2)/2  ,他们分别往回返并掉下去的时间就是(x1+x2)/2 和l-(x1+x2)/2

  那么总用时就是(x2-x1)/2+(x1+x2)/2和(x2-x1)/2 +l-(x1+x2)/2   中的最大值,化简就是max(x2 ,l-x1)

  那么最短用时就是min(x2,max(l-x2),max(l-x1,l-x2),max(x2,l-x1)) ,最大值也同理,再与x1<x2关联一下,很容易发现,结果其实就是min(max(x1,l-x1),max(x2,l-x2)) 与max(max(x1,l-x1),max(x2,l-x2))

  也就是说其实最小值就是把所有人的max(xi,l-xi)取最小,而最大值就是取最大

 当然这还有另一种理解,就是两个人他们是完全等效的,相遇折返其实就是相当于两个人互相穿过对方,所以也可以写出这个式子来

代码:

 #include<cstdio>
#include<algorithm>
using namespace std; int main()
{
int t,l,n,i,a;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&l,&n);
int minans=,maxans=;
for(i=;i<n;i++)
{
scanf("%d",&a);
minans=max(minans,min(a,l-a));
maxans=max(maxans,max(a,l-a));
}
printf("%d %d\n",minans,maxans);
}
return ;
}

  

题目分享R的更多相关文章

  1. 题目分享C 二代目

    题意:一个数列是由 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6.....组成,也就是1-1,1-2,1-3......并且如果遇到多位数也要拆成数字比如1-10 ...

  2. 题目分享X

    题意:一张票有n位数,如果这张票的前一半数字的和等于后一半数字的和(n一定是偶数),就称这张票为快乐票.有些数被擦除了,标记为’?’(’?‘的个数也是偶数),现在Monocarp 和 Bicarp 进 ...

  3. 2019年腾讯PHP程序员面试题目分享

    有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群​jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...

  4. 20190924-LeetCode解数独题目分享

    解决数独 题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...

  5. 题目分享H 二代目

    题意:有m个限制,每个限制l1,r1,l2,r2四个数,限制了一个长度为n的数第l1到r1位要与第l2到r2相同,保证r1-l1=r2-l2,求在限制下一共有多少种数 分析: 暴力的话肯定是从l1-r ...

  6. 题目分享E 二代目

    题意:一棵点数为n的树,每个节点有点权,要求在树中中找到一个最小的x,使得存在一个点满足max(该点点权,该点相邻的点的点权+1,其他点的点权+2)=x 分析:首先要能把题目转化为上述题意 首先题目让 ...

  7. 题目分享F 二代目

    题意:T个点R种双向边,P种单向边,求点S到每个点的最短距离 分析:(这再看不出来是spfa就该**了) 首先,这题能否用spfa就看他是否有负环呗,显然,双向边的权值非负,单向边还有个啥政策,总之显 ...

  8. 题目分享D 二代目

    题意:给定一个T条边的无向图,求S到E恰好经过N条边的最短路径 T≤100 N≤1000000 分析:(据说好像假期学长讲过) 首先很容易想到的是dp[i][j][k]表示从i到j经过k条边的最短路径 ...

  9. 题目分享V

    题意:现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k(k可以是任意整数,每次不一定相同)现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话Yes,否则No. 分 ...

随机推荐

  1. GitHub+PicGo构建免费图床及其高效使用

    搭建免费图床全过程! 一.搭建缘由 一开始搭建博客,避免不了要用许多图片,最初使用七牛云来做博客图床,但是后来发现,七牛云只有30天的临时域名,hhhhhhh,果然啊,天下就没有免费的好事啊~后来就发 ...

  2. python3(十八)decorator

    # -----------------------1-------------------------------------------- # 由于函数也是一个对象,而且函数对象可以被赋值给变量,所 ...

  3. 一个有关 scala 编程语言 的博客

    http://www.cnblogs.com/superjt/category/312683.html

  4. wireshark没有找到接口

    今天安装wireshark,打开发现显示没有找到接口,网上搜索发现出现这种问题的都是win10,但是我的是win7 看了一下win10这种问题的原因是自带的winpcap不支持win10,应到http ...

  5. linux常用命令整理(一)

    1.sort(排序) 典型例题:sort -t: -k3n /etc/passwd 以冒号为分隔符根据第三个域的数字大小进行排序(默认分隔符是空格) 2.uniq(去除文件中的连续重复行) 典型例题: ...

  6. ADO.NET 事务控制

    在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务.若要执行事务,请执行下列操作: 1.调用Connection 对象的BeginTransaction 方法 ...

  7. Cucumber(3)——命令以及日志

    目录 回顾 基本执行命令 关于日志的生成 回顾 在上一节中,我介绍了cucumber一些基本的语法内容,如果你还没有进行相关的了解或者环境的配置,你可以点击这里来进行了解一下 在本节中,我会对cucu ...

  8. JavaScript的运行机制!!!很重要很重要!!!!!!请看大神操作!

    https://juejin.im/post/59e85eebf265da430d571f89

  9. 详解 字符串—— String、StringBuffer 与 StringBuilder

    本来这篇博文的内容,本人打算在之后的代码中一点一点通过实例讲解的,但是,本人发现,其实这里的知识点还是蛮重要的. 并且,字符串类型,在任何的程序语言中都是被认真对待的,所以,今天专门写一篇博文来介绍一 ...

  10. 重启mysql服务

    重启mysql 启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo service mysql start 停止mysql: 方式一:sudo /et ...