当前位置: 代码迷 >> 综合 >> HAUT OJ 1453: 勤劳的蚂蚁和聪明的你
  详细解决方案

HAUT OJ 1453: 勤劳的蚂蚁和聪明的你

热度:86   发布时间:2023-12-04 03:33:24.0

问题描述:

n 只蚂蚁以每秒 1 cm的速度在长为 L cm的水平竿子上爬,当蚂蚁爬到竿子的端点时就会掉落。由于竿子很细,不允许蚂蚁在上面并行,也就是说当两只蚂蚁迎面相遇时,只能调头向各自相反的方向爬行。对于每个蚂蚁,我们只知道它距离竿子最左端的距离Xi ,  不清楚它当前的方向。聪明的你能否计算出所有蚂蚁落下竿子所需的最短时间和最长时间。 
输入:

第一行输入两个整数L (竿长),n(小蚂蚁的个数) 
第二行输入n个整数X,Xi   为第 i 个蚂蚁距竿子最左端的距离

输出:

输出占两行,第一行输出最短时间,且在结果前加上”min = “,最大值同理 

样例输入:

10 3
2 6 7

样例输出:

min = 4
max = 8

原因分析:

最短时间   以L/2为分界线,左边部分的蚂蚁方向朝左,右半部分朝右,因为蚂蚁速度都一样,所以不会相碰,算出各只蚂蚁最小的时间,再求其中的最大值即可

最长时间   (考虑相遇掉头的情况)假如两只蚂蚁相碰,左碰右后,左蚂蚁(掉头朝左),右蚂蚁(掉头朝右),相当于左蚂蚁仍朝右,右蚂蚁仍朝左,即两只互相穿插过去,由此可计算出蚂蚁距端点最大的时间(即到较远的端点的时间),然后再求出时间中的最大值.


解决方案:


#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main()
{int L,n;double pos;cin>>L>>n;double minT=0,maxT=0;for(int i=0;i<n;i++){cin>>pos;double temp=min(pos,L-pos);minT=max(minT,temp);temp=max(pos,L-pos);maxT=max(maxT,temp);}cout<<"min = "<<minT<<endl;cout<<"max = "<<maxT<<endl;return 0;