A 撞来撞去的圆圆的东西
大家以前都玩过弹珠吧,或者橡皮球,或者……呃,反正玩过圆圆的东西是吧(-_-|||||)
好吧,你们可以发挥想象力,头脑中想一个球形物体(弹性、软硬、颜色之类的没有任何限制),之后把它想象成没哟半径的质点。
假设在一个无限长的x轴上有n个质点,每个质点随机选择左右移动,速度均为每秒钟1个单位,如果两个质点相遇,将发生完全弹性碰撞(也就是两个质点各自调头往回走,速度不变)。给定这n个质点的坐标,问T时刻内(含T时刻)所有小球发生碰撞的次数的期望。
输入:
多case,第一行输入n,T,含义见题目描述。其中n<=1000,T<=10^9。
第二行输入n个数,表示n个质点的坐标,坐标范围为[-10^9,10^9]。
输出:
一个数,为所有小球发生碰撞的次数的期望,末尾保留2位小数。
样例输入:
2 1
3 8
2 1
3 4
样例输出:
0.00
0.25
考虑到质点只会往左或者往右,分别讨论,两质点同向不可能相遇,两质点反向也不能,两者相向时,当满足两质点距离之差小于等于时间的两倍时可能相遇。本题求期望,故直接算,最后除以4即可。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int s[1010];
int main()
{
int n,t,i,j;
double ans;
while(scanf("%d%d",&n,&t)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&s[i]);
ans=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(abs(s[i]-s[j])<=2*t)
ans++;
printf("%.2lf\n",ans/4);
}
return 0;
}