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

hamayanhamayan's blog

Addition and Multiplication [AtCoder Beginner Contest 076 B]

http://abc076.contest.atcoder.jp/tasks/abc076_b

解法

http://abc076.contest.atcoder.jp/submissions/1720047

愚直に全てシミュレートする。
キューのqueに今までで取りうる可能性のある数を入れるとすると、
N回、キューの中の数を2倍か+Kかして更新していく。
最後にキューの中に入っている最小の数を答える。

#define INF INT_MAX/2
int N, K;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> K;
 
    queue<int> que;
    que.push(1);
 
    rep(i, 0, N) {
        queue<int> q;
 
        while (!que.empty()) {
            int x = que.front(); que.pop();
            q.push(x * 2);
            q.push(x + K);
        }
 
        swap(que, q);
    }
 
    int ans = INF;
    while (!que.empty()) {
        int x = que.front(); que.pop();
        ans = min(ans, x);
    }
    cout << ans << endl;
}