题1 计算概率
【问题描述】
小明有n个长度不一的小木棍,这些木棍的长度都是正整数。小明的父亲想和小明做一个游戏。他规定一个整数长度l,让小明闭着眼睛从n个木棍中随便拿出两个。如果两个木棍的长度总和小于等于l,则小明胜,否则小明的父亲胜。小明想知道他胜出的概率究竟有多大。
【输入文件】
输入包含两行。第一行为两个整数n和l,其中n和l都不超过100000。第二行包含n个整数,分别为n个木棍的长度。
【输出文件】
输出包含一个实数,小明胜出的概率,保留两位小数。
【输入样例】
4 5
1 2 3 4
【输出样例】
0.67
我的代码超时...
#include<bits/stdc++.h>
using namespace std;
int a[5000001],n,l,ans;
int main()
{
freopen("calculate.in","r",stdin);
freopen("calculate.out","w",stdout);
cin>>n>>l;
int zong=(n*n-n)/2;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=n-1;i++)
{
int j=n;
while(a[i]+a[j]>l&&i<j)
{
--j;
}
ans+=j-i;
if(i>=j) break;
}
printf("%.2lf",ans*1.0/zong);
return 0;
}
求dalao帮助