[AtCoder] ABC 157 C – Guess The Number

2020年12月15日

問題

方針

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