CODEFORCES 318 A. Even Odds

問題概要

  • \(1\)以上\(N\)以下を満たす数字の中で、\(K\)番目に該当する数を求めよ。
  • ただし、\(N\)個の数字は以下の規則によって並べ替えられるものとする
    • \(1\)以上\(N\)以下を満たす奇数をはじめに並べる
    • その後ろに残った偶数を並べる
    • 数は昇順で並ぶものとする

問題のリンク

制約

\(1 \leq K \leq N \leq\) 1012

考察

\(N\)が奇数の時、並び替えた後の数列の前半の項は奇数のみで構成されることを考慮すると、\(N = N + 1\)としても\(N\)以下の数字の並び順には影響しない。

以下、\(N\)を偶数として考える。

\(N\)が偶数ならば、

  • \( K \leq N/2 \) の時、 \(2K-1\) が答え
  • それ以外の時、 \(2(K-N/2)\) が答え
#include <iostream>
using namespace std;
typedef long long ll;

int main() {
  cin.tie(0); ios::sync_with_stdio(false);
  ll N, K, ans; cin >> N >> K;
  if(N % 2 == 1) N += 1;
  if(K <= N/2) ans = 2*(K-1) + 1;
  else ans =  2 * (K-N/2);
  std::cout << ans << std::endl;
  return 0;
}