メモ

yukicoderでゆるふわgolf

yukicoder No.159 刺さらないUSB

問題はこちら
No.159 刺さらないUSB - yukicoder

確率の計算
P1は「0回目で刺さらずかつ1回目で刺さる確率」なので
最初裏である確率(1-p)×1回ひっくり返して刺さる確率q
P2は「0,1回目で刺さらずかつ2回目で刺さる確率」なので
最初表である確率p×最初刺さらない確率(1-q)×2回ひっくり返して刺さる確率q
よって(1-p)q<p(1-q)qならYESとなる

int main(){
	double p,q;
	scanf("%f%f",&p,&q);
	puts((1-p)*q<p*(1-q)*q?"YES":"NO");
	return 0;
}

q≠0なので両辺qで割り
1-p<p-pq
"p≠0なら"両辺pで割り
1/p+q<2
となる
ところで元の不等式はp=0のとき左辺=右辺=0なのでfalseであり、
C言語では1/0.0はinfとなりinf<2はfalseなので、この時も最後の式で良い事がわかる

式は左から評価される処理系依存技でscanfの返り値2を利用すれば次のようにまとめられる

x;
float p,q;
main(){
	x=!puts(scanf("%f%f",&p,&q)>1/p+q?"YES":"NO");
}

66B