https://beta.atcoder.jp/contests/abc114/tasks/abc114_c
解説
https://beta.atcoder.jp/contests/abc114/submissions/3708011
全探索をしよう。
10^9以下の七五三数というのは実はそんなに多くない。
9桁で各桁357のいずれかになる組み合わせは3^9通りあるが、これは全探索で試せる。
なので、3~9桁のすべてについて七五三数を作り、N以下の数の個数を数えると答え。
3進数の全探索が少し大変だが、「3のあまりを見て、3で割る」というのを繰り返せば下の桁から数が取得できるので、
それ以外は2進数と同じように行っていく。
int N; int v[3] = { 3,5,7 }; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; int ans = 0; rep(dgt, 3, 10) { int ma = 1; rep(i, 0, dgt) ma *= 3; rep(msk, 0, ma) { int x = 0; int m = msk; int cn[3] = { 0, 0, 0 }; rep(i, 0, dgt) { int d = m % 3; x = x * 10 + v[d]; cn[d]++; m /= 3; } if (x <= N and 0 < cn[0] and 0 < cn[1] and 0 < cn[2]) ans++; } } cout << ans << endl; }