http://codeforces.com/contest/912/problem/B
1,2,3,...,Nのように[1,N]の数が1つずつ用意されている。
ここからK個以下の数を取ってきてxorを取る。
最大値は?
解法
http://codeforces.com/contest/912/submission/33927735
K=1の場合はxorを取る余地がなく、ただ最大値を答えるしかない。
Nを答えて終わろう。
2≦Kの場合は2つの数を取ることで必ず最大値を作ることができる。
例えばN=14を考えてみよう
14 = 1110であるが 1000 : 最上位ビットだけ立っている数 0111 : その1つ前の数 ↓ 1111 : 最大値!
つまり、ビットが立っている最上位ビットまで全て1であるような数を2つの数から作ることができる。
よって、これを計算して答える。
typedef long long ll; ll N, K; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> K; if (K == 1) { printf("%lld\n", N); return; } ll ans = 1; while (ans <= N) ans *= 2; ans--; cout << ans << endl; }