mayoko’s diary

プロコンとかいろいろ。

SRM 501 div1 easy:FoxPlayingGame

SRM 501の練習会に参加。easyとmed通してそこそこでした。今回のmedは簡単だったしまぁ。

解法

あんまり推薦されない方法で解いてしまった感じがあるが,場合分けして通した。

無難にやりたいならdp[a][b]=(足し算の残り回数がa回で掛け算の残り回数がb回のときの最大値)みたいな感じでやれば良さそう。

class FoxPlayingGame {
public:
    double theMax(int nA, int nB, int paramA, int paramB) {
        double ans = 0;
        double a = paramA / 1000.;
        double b = paramB / 1000.;
        if (a > 0) {
            if (b < 0) nB = nB/2*2;
            if (abs(b) < 1) {
                ans = a*nA;
            } else {
                ans = a*nA;
                for (int i = 0; i < nB; i++) {
                    ans *= b;
                }
            }
        } else {
            if (b < 0) {
                if (b > -1) {
                    ans = a*nA;
                    if (nB > 0) ans *= b;
                } else {
                    if (nB%2 == 0) nB--;
                    ans = a*nA;
                    for (int i = 0; i < nB; i++) {
                        ans *= b;
                    }
                }
            } else {
                if (b < 1) {
                    ans = a*nA;
                    for (int i = 0; i < nB; i++) {
                        ans *= b;
                    }
                } else {
                    ans = a*nA;
                }
            }
        }
        return ans;
    }
};