Decimal Sequences | Aizu Online Judge
ICPCアジア地区予選2015Aで出た問題。

概要

(詳細は問題文を読んでください)

n個の数列dが与えられる。それぞれの数d_iは一桁の非負整数である。
連続した順列で表せない最小の非負整数を答えよ。
例: d={3, 0, 1} で表せる整数は {3, 0, 1, 30, 301} なので、2が答え。

制約

1 <= n <= 1000
0 <= d_i <= 9

解法

制約が小さいので全探索を考える。
表せる4桁の非負整数の種類は高々n-4種類なので、[0,10000)を候補として調べ、連続した順列で表せない最小の数を出力すれば良い。

主要部分のコードはこんな感じ。

int solve(int n, VI &ds) {
    const int M = 10000;
    VB es(M);

    rep(i, n) {
        int num = 0;
        for (int j = 0; j < 4 && i + j < n; j++) {
            num = num * 10 + ds[i + j];
            es[num] = true;
        }
    }

    return find(ALL(es), false) - es.begin();
}

記録

AC: 15:30

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください