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

hamayanhamayan's blog

Similar Arrays [CODE FESTIVAL 2017 予選C B]

http://code-festival-2017-qualc.contest.atcoder.jp/tasks/code_festival_2017_qualc_b

解法

http://code-festival-2017-qualc.contest.atcoder.jp/submissions/1705906

与えられた整数列に似ている整数列を全探索してチェックしていく。
似ている整数列の全列挙は再帰関数を使って行う。
このように数列の全列挙は再帰関数を使って行える場合が多い。
実装は説明がとてもしづらいので、みてもらうといいが、dpt

typedef long long ll;
int N, A[10];
//---------------------------------------------------------------------------------------------------
int ans = 0;
int D[10];
void f(int dpt) {
    if (dpt == N) {
        ll x = 1;
        rep(i, 0, N) x *= (A[i] + 1 - D[i]);
        if (x % 2 == 0) ans++;
        return;
    }
 
    rep(i, 0, 3) {
        D[dpt] = i;
        f(dpt + 1);
    }
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> A[i];
    f(0);
    cout << ans << endl;
}