[AtCoder] ABC 157 C – Guess The Number
問題
方針
\( d_i \) を上位から \( i \) 桁目の数字とします。\( d \) を \( -1 \) で初期化し、条件を満たすように数字を決めた時、\( d_i \) が異なる数字を取るときは整数が存在しません。また、\( N \neq 0 \) のとき \( d_0 \neq 0 \) でなければなりません。\( M \) 個の条件を当てはめたとき、\( d_i = -1 \) となっている箇所は、\( d_i = 0 \) とします。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int N, M; cin >> N >> M; int s[N], c[N]; for (int i = 0; i < M; i++) { cin >> s[i] >> c[i]; s[i]--; } int d[N]{}; fill(d, d + N, -1); for (int i = 0; i < M; i++) { if (N != 1 && s[i] == 0 && c[i] == 0) { cout << "-1\n"; return 0; } if (d[s[i]] == -1) { d[s[i]] = c[i]; } else if (d[s[i]] != c[i]) { cout << "-1\n"; return 0; } } if (N == 1 && d[0] == -1) { cout << "0\n"; return 0; } if (d[0] == -1) d[0] = 1; for (int i = 1; i < N; i++) { if (d[i] == -1) d[i] = 0; } for (int i : d) { cout << i; } cout << "\n"; return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません