メモ

yukicoderでゆるふわgolf

yukicoder No.242 ビンゴゲーム

問題はこちら
No.242 ビンゴゲーム - yukicoder

5数の組み合わせは_{99}C_5通りあり、
N個の数でビンゴになるような5数の組み合わせが_N C _5通りあるので
各列についてN個目までにビンゴになる確率は\frac{_N C_5}{_{99}C_5}

5×5のカードは縦横斜めで12ビンゴできるので期待値の線形性より求めるものはこれの12倍
(任意の確率変数X,Yに対してE[X+Y]=E[X]+E[Y]が成立)

適当に約分してやれば
\frac{N(N-1)(N-2)(N-3)(N-4)}{99*98*97*96*95}*12=\frac{N(N-1)(N-2)(N-3)(N-4)}{715231440}
となる

int main(){
	double n;
	scanf("%lf",&n);
	printf("%f",n*(n-1)*(n-2)*(n-3)*(n-4)/715231440);
	return 0;
}

縮めて

n;main(){n=scanf("%d",&n)>printf("%f",n*~-n*(n-2)*(n-3)/715231440.*(n-4));}
//掛け算全部を先にするとオーバーフローするので注意

定数は1桁ごまかせて

n;main(){n=scanf("%d",&n)>printf("%f",n*~-n*(n-2)*(n-3)/7152314e2*(n-4));}

どうにかカッコを外せないかと悩んでいたら変態挙動をする未定義動作コードを書いてしまった…

n;main(){n=scanf("%d",&n)>printf("%f",n*n--*--n*--n/7152314e2*--n);}
//全部を前置decにするとダメ

通る理由はさっぱりわからないけど68B

2016/10/16追記
もう1桁削れた

n;main(){n=scanf("%d",&n)>printf("%f",n*n--*--n*--n/715232e3*--n);}

67B