torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces #188, Division 2, A : Even Odds

概要

N 以下の正整数を以下の手順で並べる。

  1. 奇数を昇順に並べる
  2. それに続いて、偶数を昇順に並べる

このとき、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;
}