001 D - Mistakable Calculate

2 secs 1024 MB
Daigakuimokempi's icon Daigakuimokempi
ab+c<de\frac{a}{b} + c < \frac{d}{e}

この式の通りに計算すると、例えば double の丸め誤差によって異なる回答を出力してしまう可能性があります。 例えば、以下の入力例の解答は同値であるため No ですが、そのまま計算してしまうと Yes と出力してしまいます。

2 7 1 9 7

この式の左辺と右辺はこのように計算されています。右の方が若干大きい値になっていることが分かりますか?

1.285714285714285587403082...
1.285714285714285809447687...

よって、丸め誤差が発生しない整数値のまま計算するために式の変形を行います。

ab+c<dea+bcb<dee(a+bc)<bd\begin{aligned} \frac{a}{b} + c &< \frac{d}{e} \\[1.5em] \frac{a+bc}{b} &< \frac{d}{e} \\[1.5em] e(a+bc) &< bd \end{aligned}

これが成り立てば Yes 、成り立たなければ No を出力すればいいです。

制約より、e(a+bc)e(a+bc)bdbd の値が int 型整数値の最大値 2.14×1092.14×10^9 を超えることはないので、 long long 型を使う必要はありません。

〈追記 8/3 22:21〉

float 型でやったら行けたらしい。やっちまった。

#include <stdio.h>
int main(void){
    int a,b,c,d,e;  scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
    
    int left = e*(a+b*c), right = b*d;
    
    if(left<right) printf("Yes");
    else printf("No");
}