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

hamayanhamayan's blog

Collatz Problem [AtCoder Beginner Contest 116 B]

https://atcoder.jp/contests/abc116/tasks/abc116_b

解説

https://atcoder.jp/contests/abc116/submissions/4059362

シミュレーションをしよう。
ある数が以前に出ていたかを判定するにはsetを使うといい。
以前に出たことある数が出たら、その番号を答える。

int S;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> S;
 
    set<int> done;
    done.insert(S);
    int cur = S;
 
    rep(id, 2, 1010101) {
        int nxt;
        if (cur % 2 == 0) nxt = cur / 2;
        else nxt = 3 * cur + 1;
 
        if (done.count(nxt)) {
            printf("%d\n", id);
            return;
        }
        done.insert(nxt);
        cur = nxt;
    }
}