Problem Description
今天是一年一度的植树节,腾讯幼儿园要求每个老师在班里选出几个小朋友一起去野外种植小树苗,根据学校的整体安排,湫湫老师的班里要选出3个小朋友。 已知湫湫的班里共有n个孩子,每个孩子有Bi个朋友(i从1到n),且朋友关系是相互的,如果a小朋友和b小朋友是朋友,那么b小朋友和a小朋友也一定是好朋友。为了选择的公平性,湫湫老师会随机抽取3个小朋友出来(每个人被抽到的概率相同),但是她很希望这3个小朋友之间的关系完全相同,湫湫老师想请你帮她算算抽到的3个小朋友正好关系相同的概率是多少?
PS. 关系相同就是指要么3个人互相是好朋友,要么3个人互相都不是好朋友。
PS. 关系相同就是指要么3个人互相是好朋友,要么3个人互相都不是好朋友。
Input
输入数据第一行是一个整数T(1<=T<=1000),表示输入数据的组数;每组数据的第一行是一正整数n表示孩子的总数(2<n<=1000),第二行有n个数Bi (i从1到n),分别代表每个小朋友的朋友的个数。
Output
对于每组数据,请输出抽到的3个小朋友关系相同的概率,结果保留3位小数。
Sample Input
1 5 3 3 3 3 4
Sample Output
0.400
数学题,找出不满足题意的(朋友中取一个,非朋友中取一个)。这里重点要说下我这JAVA写的代码放进去的时候超时了。限时是1s,在本机上测无问题。提交进去就超时。本人看来看去,程序实在是没什么优化的地方了。难道是杭电acm的服务器的CPU频率不行?可是别人有JAVA做通过的。如果哪位路过的伙伴发现此程序的问题,还请指点,不胜感激。
package first_round;
import java.util.Scanner;
public class Number_04 {
private static int[] stuFren = new int[1001];
private static int count = 0;// add up cases that cannot meet the requirement
public static void main(String... strings) {
Scanner sc = new Scanner(System.in);
int groupNum = sc.nextInt();
while (groupNum-- > 0) {
// long start = System.currentTimeMillis();
int n = sc.nextInt();
for (int j = 0; j < n; j++) {
stuFren[j] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
count += stuFren[i] * (n - 1 - stuFren[i]);// chose a child from his friends and another the opposite
}
count >>= 1;
int total = n * (n - 1) * (n - 2) / 3;
total >>= 1;
double result = 1.0 * (total - count) / total;
System.out.format("%.3f\n", result);
count = 0;
// System.out.println(System.currentTimeMillis() - start);
}
sc.close();
}
}