链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
有n个小球以每秒1cm的速度在一个滑槽上滑行,滑槽没有封口,所以当小球滑到滑槽的端点时将会掉落下来。
滑槽的宽度只容许一个小球通过,小球之间的碰撞为弹性碰撞(即碰撞后小球的速度绝对值不变,方向相反)。
已知n个小球初始时的位置,但不知道小球初始时的朝向,小球与滑槽之间的摩擦力不计,
请你计算所有小球掉下所需要的最短和最长的时间(秒)。
输入描述:
第一行输入一个整数L代表滑槽的长度(单位厘米)(1 <= L <= 10^6); 第二行输入一个整数n代表小球的个数(1 <= n <= 10^6); 第三行输入n个整数,第i个整数xi(1 <= xi <= L)代表第i个小球初始时的位置(即,距离滑槽左端xi厘米),整数之间用空格分开。
输出描述:
输出一行两个整数,分别代表所有小球掉落的最短和最长时间(秒)。
示例1
输入
复制10 3 2 6 7
10 3 2 6 7
输出
复制4 8
4 8
#include<iostream>
using
namespace
std;
const
int
N=1e6+10;
int
a[N],b[N];
int
main()
{
long
long
int
l,n,i,temp,j;
cin>>l>>n;
for
(i=0;i<n;i++)
cin>>a[i];
for
(i=0;i<n;i++)
{
b[i]=l-a[i];
if
(a[i]>b[i])
{
temp=a[i];
a[i]=b[i];
b[i]=temp;
}
}
for
(j=1;j<n;j++)
{
for
(i=0;i<n-j;i++)
{
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
cout<<a[n-1]<<
" "
<<l-a[0];
return
0;
}