はまやんはまやんはまやん

hamayanhamayan's blog

Maxi-Buying [AtCoder Beginner Contest 206(Sponsored by Panasonic) A]

https://atcoder.jp/contests/abc206/tasks/abc206_a

解説

https://atcoder.jp/contests/abc206/submissions/23625515

今回の問題で精度が要求されるかは分からないが、テクとして、小数計算は精度が心配だから、できるなら整数で計算するというものがある。
今回要求されている、1.08×Nの小数点以下切り捨ては、普通にやると1.08×Nで一旦小数表現がなされる。
この表現時に精度問題が発生する可能性があるので、「108×N/100の切り捨て」と言い換える。
こうすると108×Nは整数で計算ができ、100での切り捨てをすることで一度も小数を介することなく、元の計算が行える。
このように小数表現を排除する手法は床関数で答えを出すときに良く使えるので覚えておくと、役立つときがあるだろう。

後は独特な出力表現なので、typoしないように気を付けよう。

int N;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    
    int included = N * 108 / 100;

    if (included < 206) cout << "Yay!" << endl;
    else if (included == 206) cout << "so-so" << endl;
    else cout << ":(" << endl;
}