Hatena::Grouptopcoder

hama_DU@TopCoderへの道

2012-03-19SRM370 (Practice)

SRM 370 DrawingMarbles

|  SRM 370 DrawingMarbles - hama_DU@TopCoderへの道 を含むブックマーク はてなブックマーク -  SRM 370 DrawingMarbles - hama_DU@TopCoderへの道

http://www.topcoder.com/stat?c=problem_statement&pm=8016

  • 数学。
    • 各色について確率を計算し、足し合わせる。
    • colors[i] < n の場合に注意する。
public class DrawingMarbles {

	public double sameColor(int[] colors, int n) {
		int len = colors.length;
		double prob = 0.0d;
		int sum = 0;
		for (int i = 0 ; i < len ; i++) {
			sum += colors[i];
		}
		
		for (int i = 0 ; i < len ; i++) {
			int nsum = sum;
			int target = colors[i];
			double pr = 1.0d;
			if (target >= n) {
				for (int p = 0 ; p < n ; p++) {
					pr *= (double) target / nsum;
					target--;
					nsum--;
				}
				prob += pr;
			}
		}
		
		return prob;
	}
}