概要
N 以下の正整数を以下の手順で並べる。
- 奇数を昇順に並べる
- それに続いて、偶数を昇順に並べる
このとき、k 番目の数字は何か求めよ。
解法
l 番目の奇数は ( 2 * l ) - 1 で、m 番目の偶数は 2 * m です。
このことを念頭に置くと、k に対応する数字の奇偶で場合分けをして、偶数の場合は何番目の偶数かを求めれば、上の式により答えが求まります。
コード
typedef long long LL; int main() { cin.tie( 0 ); ios::sync_with_stdio( false ); LL n, k; cin >> n >> k; if ( k <= n / 2 + n % 2 ) { cout << 2 * k - 1 << endl; } else { const LL k2 = k - ( n / 2 + n % 2 ); cout << 2 * k2 << endl; } return 0; }