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

hamayanhamayan's blog

JOI 君の初恋 / JOI,Fall in love [JOI2018 予選模試 A]

https://www.hackerrank.com/contests/joi2018/challenges/joi-joi-fall-in-love-1

解法

ゲームの手順を分数を使って、誤差なく計算する。
分子をup, 分母をdwnとして、計算していく。
 
x足す
up += x*dwn
x引く
up -= x*dwn
x/y倍する
up *= x
dwn *= y
xで割る
dwn *= x

分数の用に計算すると、このようなルールになるので、これですべての手順を行う。
後は、up/dwnを計算すると答え。

int N;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;

    ll up = 0, dwn = 1;
    
    up += (N - 10) * 3 + 10;
    dwn *= 2;
    up += 15 * dwn;
    up *= 3;
    up *= 2; dwn *= 9;
    up -= N * dwn;
    up *= 3;
    up += 47 * dwn;

    ll ans = up / dwn;
    cout << ans << endl;
}