2683(AOJ 1135):Ohgas' Fortune

keyword

シミュレーション C++

概要

金額と、金利と毎年の手数料の組と年数が与えられる。決められた年数で最大お金がどれだけ増やせるかを求める問題。
問題文が長いけど、ひねりは無い。読めたら後は書くだけ。調べるの面倒で変数名にtanriとかhukuriとか使ってるけどきっと後で見ると恥ずかしいんだろうな。

int main(){
    int rept;
    scanf("%d",&rept);
    LOOP(rept){
        int sub, money, year, i, j, n, pat, cnst, ans=0, cur;
        double multi;
        vector< pair<double, int> > fukuri, tanri;
        scanf("%d%d%d",&money,&year,&n);
        REP(i,n){
            scanf("%d%lf%d",&pat,&multi,&cnst);
            if(pat) fukuri.PB(MP(multi,cnst));
            else tanri.PB(MP(multi,cnst));
        }

        REP(i,SZ(fukuri)){
            cur = money;
            REP(j,year){
                cur += (int)(cur*fukuri[i].fs) - fukuri[i].sc;
            }
            ans = max(ans, cur);
        }
        REP(i,SZ(tanri)){
            cur = money;
            sub = 0;
            REP(j,year){
                sub += (int)(cur*tanri[i].fs);
                cur -= tanri[i].sc;
            }
            ans = max(ans, cur+sub);
        }

        printf("%d\n",ans);
    }

    return 0;
}