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