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

hamayanhamayan's blog

Guess The Number [AtCoder Beginner Contest 157 C]

https://atcoder.jp/contests/abc157/tasks/abc157_c

解説

https://atcoder.jp/contests/abc157/submissions/10471370

答えとなる数は[0,999]の範囲に収まる。
なので、答えとなる数を小さい方から順番に確認していき、条件を満たすものがあれば答える。
判定の実装では、C++だとto_stringを使うと色々楽にできる。
intとstringにすると速度は犠牲になるが、実装(特に桁に対する実装)は楽になる。
今回は、制約も全部ちっちゃいので、多少無理しても問題ない。

ok := 条件を満たすか
というのを更新しながら判定する。
条件はすべて満たしている必要があるので、満たさないものがあればok = falseとするよう実装する。
判定問題では自分はよく使う記法だ。

int N, M, S[5], C[5];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> M;
    rep(i, 0, M) cin >> S[i] >> C[i], S[i]--;

    rep(ans, 0, 1000) {
        string s = to_string(ans);
        if (s.length() != N) continue;

        bool ok = true;
        rep(i, 0, M) rep(j, 0, N) if (j == S[i] && (s[j] - '0') != C[i]) ok = false;
        if (ok) {
            cout << ans << endl;
            return;
        }
    }

    cout << -1 << endl;
}