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; }