https://yukicoder.me/problems/no/820
解説
https://yukicoder.me/submissions/343360
パット見難しそうに見えると思う。
例えば、Nが3のときは、
1 2 3 4 5 6 7 8
となり、Kが2のときは、
4 8
となって、2が答え。
これは最大が8で4で割り切れる個数なので、8/4=2。
例えば、Nが4のときは、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
となり、Kが2のときは、
4 8 12 16
となって、4が答え。
これは最大が16で4で割り切れる個数なので、16/4=4。
という感じに実験していくと、2^N÷2^Kが答えになると気がつく。
これは2^(N-K)であるため、これを基本は答えればいい。
N-K<0である場合は答えは存在しないので、0が答え。
int N, K; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> K; int d = N - K; int ans = 0; if (0 <= d) { ans = 1; rep(i, 0, d) ans *= 2; } cout << ans << endl; }